summaryrefslogtreecommitdiffstats
path: root/extras/hs-test/actions.go
diff options
context:
space:
mode:
Diffstat (limited to 'extras/hs-test/actions.go')
-rwxr-xr-xextras/hs-test/actions.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/extras/hs-test/actions.go b/extras/hs-test/actions.go
index 34096df27ba..279589b5d41 100755
--- a/extras/hs-test/actions.go
+++ b/extras/hs-test/actions.go
@@ -15,6 +15,7 @@ import (
"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"
)
@@ -347,3 +348,62 @@ func (a *Actions) ConfigureHttpTps(args []string) *ActionResult {
<-ctx.Done()
return nil
}
+
+func (a *Actions) ConfigureTap(args []string) *ActionResult {
+ var startup Stanza
+ startup.
+ NewStanza("session").
+ Append("enable").
+ Append("use-app-socket-api").Close()
+
+ ctx, cancel := newVppContext()
+ defer cancel()
+ con, vppErrCh := vpphelper.StartAndDialContext(ctx,
+ vpphelper.WithRootDir(workDir),
+ vpphelper.WithVppConfig(configTemplate+startup.ToString()))
+ exitOnErrCh(ctx, cancel, vppErrCh)
+ ifaceClient := interfaces.NewServiceClient(con)
+
+ pref, err := ip_types.ParseIP4Prefix("10.10.10.2/24")
+ if err != nil {
+ return NewActionResult(err, ActionResultWithDesc("failed to parse ip4 address"))
+ }
+ createTapReply, err := tapv2.NewServiceClient(con).TapCreateV2(ctx, &tapv2.TapCreateV2{
+ HostIfNameSet: true,
+ HostIfName: "tap0",
+ HostIP4PrefixSet: true,
+ HostIP4Prefix: ip_types.IP4AddressWithPrefix(pref),
+ })
+ if err != nil {
+ return NewActionResult(err, ActionResultWithDesc("failed to configure tap"))
+ }
+ ipPrefix, err := ip_types.ParseAddressWithPrefix("10.10.10.1/24")
+ if err != nil {
+ return NewActionResult(err, ActionResultWithDesc("parsing ip address failed"))
+ }
+ ipAddress := &interfaces.SwInterfaceAddDelAddress{
+ IsAdd: true,
+ SwIfIndex: createTapReply.SwIfIndex,
+ Prefix: ipPrefix,
+ }
+ _, errx := ifaceClient.SwInterfaceAddDelAddress(ctx, ipAddress)
+ if errx != nil {
+ return NewActionResult(err, ActionResultWithDesc("configuring ip address failed"))
+ }
+ _, err = ifaceClient.SwInterfaceSetFlags(ctx, &interfaces.SwInterfaceSetFlags{
+ SwIfIndex: createTapReply.SwIfIndex,
+ Flags: interface_types.IF_STATUS_API_FLAG_ADMIN_UP,
+ })
+ if err != nil {
+ return NewActionResult(err, ActionResultWithDesc("failed to set interface state"))
+ }
+ _, err = session.NewServiceClient(con).SessionEnableDisable(ctx, &session.SessionEnableDisable{
+ IsEnable: true,
+ })
+ if err != nil {
+ return NewActionResult(err, ActionResultWithDesc("configuration failed"))
+ }
+ writeSyncFile(OkResult())
+ <-ctx.Done()
+ return nil
+}