diff options
Diffstat (limited to 'extras/hs-test/actions.go')
-rw-r--r-- | extras/hs-test/actions.go | 247 |
1 files changed, 0 insertions, 247 deletions
diff --git a/extras/hs-test/actions.go b/extras/hs-test/actions.go index 60398704763..9233e2d1ea2 100644 --- a/extras/hs-test/actions.go +++ b/extras/hs-test/actions.go @@ -2,20 +2,14 @@ package main import ( "context" - "fmt" "os" - "path/filepath" "git.fd.io/govpp.git/api" - "github.com/edwarnicke/exechelper" - "github.com/edwarnicke/govpp/binapi/af_packet" - "github.com/edwarnicke/govpp/binapi/ethernet_types" interfaces "github.com/edwarnicke/govpp/binapi/interface" "github.com/edwarnicke/govpp/binapi/interface_types" ip_types "github.com/edwarnicke/govpp/binapi/ip_types" "github.com/edwarnicke/govpp/binapi/session" "github.com/edwarnicke/govpp/binapi/tapv2" - "github.com/edwarnicke/govpp/binapi/vlib" "github.com/edwarnicke/vpphelper" ) @@ -28,247 +22,6 @@ type ConfFn func(context.Context, api.Connection) error type Actions struct { } -func configureProxyTcp(ifName0, ipAddr0, ifName1, ipAddr1 string) ConfFn { - return func(ctx context.Context, - vppConn api.Connection) error { - - _, err := configureAfPacket(ctx, vppConn, ifName0, ipAddr0) - if err != nil { - fmt.Printf("failed to create af packet: %v", err) - return err - } - _, err = configureAfPacket(ctx, vppConn, ifName1, ipAddr1) - if err != nil { - fmt.Printf("failed to create af packet: %v", err) - return err - } - return nil - } -} - -func (a *Actions) ConfigureVppProxy(args []string) *ActionResult { - ctx, cancel := newVppContext() - defer cancel() - - con, vppErrCh := vpphelper.StartAndDialContext(ctx, - vpphelper.WithVppConfig(configTemplate), - vpphelper.WithRootDir(workDir)) - exitOnErrCh(ctx, cancel, vppErrCh) - - confFn := configureProxyTcp("vpp0", "10.0.0.2/24", "vpp1", "10.0.1.2/24") - err := confFn(ctx, con) - if err != nil { - return NewActionResult(err, ActionResultWithDesc("configuration failed")) - } - writeSyncFile(OkResult()) - <-ctx.Done() - return nil -} - -func (a *Actions) ConfigureEnvoyProxy(args []string) *ActionResult { - var startup Stanza - startup. - NewStanza("session"). - Append("enable"). - Append("use-app-socket-api"). - Append("evt_qs_memfd_seg"). - Append("event-queue-length 100000").Close() - ctx, cancel := newVppContext() - defer cancel() - - con, vppErrCh := vpphelper.StartAndDialContext(ctx, - vpphelper.WithVppConfig(configTemplate+startup.ToString()), - vpphelper.WithRootDir(workDir)) - exitOnErrCh(ctx, cancel, vppErrCh) - - confFn := configureProxyTcp("vpp0", "10.0.0.2/24", "vpp1", "10.0.1.2/24") - err := confFn(ctx, con) - if err != nil { - return NewActionResult(err, ActionResultWithDesc("configuration failed")) - } - err0 := exechelper.Run("chmod 777 -R " + workDir) - if err0 != nil { - return NewActionResult(err, ActionResultWithDesc("setting permissions failed")) - } - writeSyncFile(OkResult()) - <-ctx.Done() - return nil -} - -func getArgs() string { - s := "" - for i := 2; i < len(os.Args); i++ { - s = s + " " + os.Args[i] - } - return s -} - -func ApiCliInband(root, cmd string) *ActionResult { - ctx, _ := newVppContext() - con := vpphelper.DialContext(ctx, filepath.Join(root, "/var/run/vpp/api.sock")) - cliInband := vlib.CliInband{Cmd: cmd} - cliInbandReply, err := vlib.NewServiceClient(con).CliInband(ctx, &cliInband) - return NewActionResult(err, ActionResultWithStdout(cliInbandReply.Reply)) -} - -func (a *Actions) RunEchoSrvInternal(args []string) *ActionResult { - cmd := fmt.Sprintf("test echo server %s uri tcp://10.10.10.1/1234", getArgs()) - return ApiCliInband(workDir, cmd) -} - -func (a *Actions) RunEchoClnInternal(args []string) *ActionResult { - cmd := fmt.Sprintf("test echo client %s uri tcp://10.10.10.1/1234", getArgs()) - return ApiCliInband(workDir, cmd) -} - -func configure2vethsTopo(ifName, interfaceAddress, namespaceId string, secret uint64, optionalHardwareAddress ...string) ConfFn { - return func(ctx context.Context, - vppConn api.Connection) error { - - var swIfIndex interface_types.InterfaceIndex - var err error - if optionalHardwareAddress == nil { - swIfIndex, err = configureAfPacket(ctx, vppConn, ifName, interfaceAddress) - } else { - swIfIndex, err = configureAfPacket(ctx, vppConn, ifName, interfaceAddress, optionalHardwareAddress[0]) - } - if err != nil { - fmt.Printf("failed to create af packet: %v", err) - } - _, er := session.NewServiceClient(vppConn).AppNamespaceAddDelV2(ctx, &session.AppNamespaceAddDelV2{ - Secret: secret, - SwIfIndex: swIfIndex, - NamespaceID: namespaceId, - }) - if er != nil { - fmt.Printf("add app namespace: %v", err) - return err - } - - _, er1 := session.NewServiceClient(vppConn).SessionEnableDisable(ctx, &session.SessionEnableDisable{ - IsEnable: true, - }) - if er1 != nil { - fmt.Printf("session enable %v", err) - return err - } - return nil - } -} - -func (a *Actions) Configure2Veths(args []string) *ActionResult { - var startup Stanza - startup. - NewStanza("session"). - Append("enable"). - Append("use-app-socket-api").Close() - - ctx, cancel := newVppContext() - defer cancel() - - vppConfig, err := deserializeVppConfig(args[2]) - if err != nil { - return NewActionResult(err, ActionResultWithDesc("deserializing configuration failed")) - } - - con, vppErrCh := vpphelper.StartAndDialContext(ctx, - vpphelper.WithVppConfig(vppConfig.getTemplate()+startup.ToString()), - vpphelper.WithRootDir(workDir)) - exitOnErrCh(ctx, cancel, vppErrCh) - - var fn func(context.Context, api.Connection) error - switch vppConfig.Variant { - case "srv": - fn = configure2vethsTopo("vppsrv", "10.10.10.1/24", "1", 1) - case "srv-with-preset-hw-addr": - fn = configure2vethsTopo("vppsrv", "10.10.10.1/24", "1", 1, "00:00:5e:00:53:01") - case "cln": - fallthrough - default: - fn = configure2vethsTopo("vppcln", "10.10.10.2/24", "2", 2) - } - err = fn(ctx, con) - if err != nil { - return NewActionResult(err, ActionResultWithDesc("configuration failed")) - } - writeSyncFile(OkResult()) - <-ctx.Done() - return nil -} - -func configureAfPacket(ctx context.Context, vppCon api.Connection, - name, interfaceAddress string, optionalHardwareAddress ...string) (interface_types.InterfaceIndex, error) { - var err error - ifaceClient := interfaces.NewServiceClient(vppCon) - afPacketCreate := af_packet.AfPacketCreateV2{ - UseRandomHwAddr: true, - HostIfName: name, - NumRxQueues: 1, - } - if len(optionalHardwareAddress) > 0 { - afPacketCreate.HwAddr, err = ethernet_types.ParseMacAddress(optionalHardwareAddress[0]) - if err != nil { - fmt.Printf("failed to parse mac address: %v", err) - return 0, err - } - afPacketCreate.UseRandomHwAddr = false - } - afPacketCreateRsp, err := af_packet.NewServiceClient(vppCon).AfPacketCreateV2(ctx, &afPacketCreate) - if err != nil { - fmt.Printf("failed to create af packet: %v", err) - return 0, err - } - _, err = ifaceClient.SwInterfaceSetFlags(ctx, &interfaces.SwInterfaceSetFlags{ - SwIfIndex: afPacketCreateRsp.SwIfIndex, - Flags: interface_types.IF_STATUS_API_FLAG_ADMIN_UP, - }) - if err != nil { - fmt.Printf("set interface state up failed: %v\n", err) - return 0, err - } - ipPrefix, err := ip_types.ParseAddressWithPrefix(interfaceAddress) - if err != nil { - fmt.Printf("parse ip address %v\n", err) - return 0, err - } - ipAddress := &interfaces.SwInterfaceAddDelAddress{ - IsAdd: true, - SwIfIndex: afPacketCreateRsp.SwIfIndex, - Prefix: ipPrefix, - } - _, errx := ifaceClient.SwInterfaceAddDelAddress(ctx, ipAddress) - if errx != nil { - fmt.Printf("add ip address %v\n", err) - return 0, err - } - return afPacketCreateRsp.SwIfIndex, nil -} - -func (a *Actions) ConfigureHttpTps(args []string) *ActionResult { - ctx, cancel := newVppContext() - defer cancel() - con, vppErrCh := vpphelper.StartAndDialContext(ctx, - vpphelper.WithVppConfig(configTemplate)) - exitOnErrCh(ctx, cancel, vppErrCh) - - confFn := configureProxyTcp("vpp0", "10.0.0.2/24", "vpp1", "10.0.1.2/24") - err := confFn(ctx, con) - if err != nil { - return NewActionResult(err, ActionResultWithDesc("configuration failed")) - } - - _, err = session.NewServiceClient(con).SessionEnableDisable(ctx, &session.SessionEnableDisable{ - IsEnable: true, - }) - if err != nil { - return NewActionResult(err, ActionResultWithDesc("configuration failed")) - } - Vppcli("", "http tps uri tcp://0.0.0.0/8080") - writeSyncFile(OkResult()) - <-ctx.Done() - return nil -} - func (a *Actions) ConfigureTap(args []string) *ActionResult { var startup Stanza startup. |