X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=examples%2Fbinapi%2Fip_types%2Fip_types.ba.go;h=fc7fa8732fd6e99fcbb60e839860a910ecec3c86;hb=c7ae74a95d1bd6fefcbb061f5f045c60c11e32fc;hp=9335060d294235b5d8a3e39a2c91c0460105c8cd;hpb=94620e85f0bdbb054af07ce3670fadc1f76cfdf0;p=govpp.git diff --git a/examples/binapi/ip_types/ip_types.ba.go b/examples/binapi/ip_types/ip_types.ba.go index 9335060..fc7fa87 100644 --- a/examples/binapi/ip_types/ip_types.ba.go +++ b/examples/binapi/ip_types/ip_types.ba.go @@ -1,11 +1,11 @@ // Code generated by GoVPP's binapi-generator. DO NOT EDIT. // versions: -// binapi-generator: v0.4.0-alpha-1-g435c3f4-dirty -// VPP: 20.01-45~g7a071e370~b63 +// binapi-generator: v0.4.0-dev +// VPP: 20.05-release // source: /usr/share/vpp/api/core/ip_types.api.json /* -Package ip_types contains generated code for VPP binary API defined by ip_types.api (version 3.0.0). +Package ip_types contains generated code for VPP API file ip_types.api (3.0.0). It consists of: 5 aliases @@ -19,9 +19,12 @@ import ( "bytes" "context" "encoding/binary" + "fmt" "io" "math" + "net" "strconv" + "strings" api "git.fd.io/govpp.git/api" codec "git.fd.io/govpp.git/codec" @@ -40,11 +43,11 @@ const ( // APIVersion is the API version of this module. APIVersion = "3.0.0" // VersionCrc is the CRC of this module. - VersionCrc = 0x80424562 + VersionCrc = 0x9cb1c2e2 ) // AddressFamily represents VPP binary API enum 'address_family'. -type AddressFamily uint32 +type AddressFamily uint8 const ( ADDRESS_IP4 AddressFamily = 0 @@ -52,18 +55,18 @@ const ( ) var ( - AddressFamily_name = map[uint32]string{ + AddressFamily_name = map[uint8]string{ 0: "ADDRESS_IP4", 1: "ADDRESS_IP6", } - AddressFamily_value = map[string]uint32{ + AddressFamily_value = map[string]uint8{ "ADDRESS_IP4": 0, "ADDRESS_IP6": 1, } ) func (x AddressFamily) String() string { - s, ok := AddressFamily_name[uint32(x)] + s, ok := AddressFamily_name[uint8(x)] if ok { return s } @@ -188,7 +191,7 @@ func (x IPEcn) String() string { } // IPProto represents VPP binary API enum 'ip_proto'. -type IPProto uint32 +type IPProto uint8 const ( IP_API_PROTO_HOPOPT IPProto = 0 @@ -197,8 +200,9 @@ const ( IP_API_PROTO_TCP IPProto = 6 IP_API_PROTO_UDP IPProto = 17 IP_API_PROTO_GRE IPProto = 47 - IP_API_PROTO_AH IPProto = 50 - IP_API_PROTO_ESP IPProto = 51 + IP_API_PROTO_ESP IPProto = 50 + IP_API_PROTO_AH IPProto = 51 + IP_API_PROTO_ICMP6 IPProto = 58 IP_API_PROTO_EIGRP IPProto = 88 IP_API_PROTO_OSPF IPProto = 89 IP_API_PROTO_SCTP IPProto = 132 @@ -206,29 +210,31 @@ const ( ) var ( - IPProto_name = map[uint32]string{ + IPProto_name = map[uint8]string{ 0: "IP_API_PROTO_HOPOPT", 1: "IP_API_PROTO_ICMP", 2: "IP_API_PROTO_IGMP", 6: "IP_API_PROTO_TCP", 17: "IP_API_PROTO_UDP", 47: "IP_API_PROTO_GRE", - 50: "IP_API_PROTO_AH", - 51: "IP_API_PROTO_ESP", + 50: "IP_API_PROTO_ESP", + 51: "IP_API_PROTO_AH", + 58: "IP_API_PROTO_ICMP6", 88: "IP_API_PROTO_EIGRP", 89: "IP_API_PROTO_OSPF", 132: "IP_API_PROTO_SCTP", 255: "IP_API_PROTO_RESERVED", } - IPProto_value = map[string]uint32{ + IPProto_value = map[string]uint8{ "IP_API_PROTO_HOPOPT": 0, "IP_API_PROTO_ICMP": 1, "IP_API_PROTO_IGMP": 2, "IP_API_PROTO_TCP": 6, "IP_API_PROTO_UDP": 17, "IP_API_PROTO_GRE": 47, - "IP_API_PROTO_AH": 50, - "IP_API_PROTO_ESP": 51, + "IP_API_PROTO_ESP": 50, + "IP_API_PROTO_AH": 51, + "IP_API_PROTO_ICMP6": 58, "IP_API_PROTO_EIGRP": 88, "IP_API_PROTO_OSPF": 89, "IP_API_PROTO_SCTP": 132, @@ -237,7 +243,7 @@ var ( ) func (x IPProto) String() string { - s, ok := IPProto_name[uint32(x)] + s, ok := IPProto_name[uint8(x)] if ok { return s } @@ -267,6 +273,38 @@ type Address struct { func (*Address) GetTypeName() string { return "address" } +func ParseAddress(ip string) (Address, error) { + var address Address + netIP := net.ParseIP(ip) + if netIP == nil { + return address, fmt.Errorf("invalid address: %s", ip) + } + if ip4 := netIP.To4(); ip4 == nil { + address.Af = ADDRESS_IP6 + var ip6addr IP6Address + copy(ip6addr[:], netIP.To16()) + address.Un.SetIP6(ip6addr) + } else { + address.Af = ADDRESS_IP4 + var ip4addr IP4Address + copy(ip4addr[:], netIP.To4()) + address.Un.SetIP4(ip4addr) + } + return address, nil +} + +func (a *Address) ToString() string { + var ip string + if a.Af == ADDRESS_IP6 { + ip6Address := a.Un.GetIP6() + ip = net.IP(ip6Address[:]).To16().String() + } else { + ip4Address := a.Un.GetIP4() + ip = net.IP(ip4Address[:]).To4().String() + } + return ip +} + // IP4Prefix represents VPP binary API type 'ip4_prefix'. type IP4Prefix struct { Address IP4Address `binapi:"ip4_address,name=address" json:"address,omitempty"` @@ -301,6 +339,39 @@ type Prefix struct { func (*Prefix) GetTypeName() string { return "prefix" } +func ParsePrefix(ip string) (prefix Prefix, err error) { + hasPrefix := strings.Contains(ip, "/") + if hasPrefix { + netIP, network, err := net.ParseCIDR(ip) + if err != nil { + return Prefix{}, fmt.Errorf("invalid IP %s: %v", ip, err) + } + maskSize, _ := network.Mask.Size() + prefix.Len = byte(maskSize) + prefix.Address, err = ParseAddress(netIP.String()) + if err != nil { + return Prefix{}, fmt.Errorf("invalid IP %s: %v", ip, err) + } + } else { + netIP := net.ParseIP(ip) + defaultMaskSize, _ := net.CIDRMask(32, 32).Size() + if netIP.To4() == nil { + defaultMaskSize, _ = net.CIDRMask(128, 128).Size() + } + prefix.Len = byte(defaultMaskSize) + prefix.Address, err = ParseAddress(netIP.String()) + if err != nil { + return Prefix{}, fmt.Errorf("invalid IP %s: %v", ip, err) + } + } + return prefix, nil +} + +func (p *Prefix) ToString() string { + ip := p.Address.ToString() + return ip + "/" + strconv.Itoa(int(p.Len)) +} + // PrefixMatcher represents VPP binary API type 'prefix_matcher'. type PrefixMatcher struct { Le uint8 `binapi:"u8,name=le" json:"le,omitempty"` @@ -357,6 +428,9 @@ var _ = bytes.NewBuffer var _ = context.Background var _ = io.Copy var _ = strconv.Itoa +var _ = strings.Contains var _ = struc.Pack var _ = binary.BigEndian var _ = math.Float32bits +var _ = net.ParseIP +var _ = fmt.Errorf