// 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
"bytes"
"context"
"encoding/binary"
+ "fmt"
"io"
"math"
+ "net"
"strconv"
+ "strings"
api "git.fd.io/govpp.git/api"
codec "git.fd.io/govpp.git/codec"
// 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
)
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
}
}
// IPProto represents VPP binary API enum 'ip_proto'.
-type IPProto uint32
+type IPProto uint8
const (
IP_API_PROTO_HOPOPT IPProto = 0
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
)
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,
)
func (x IPProto) String() string {
- s, ok := IPProto_name[uint32(x)]
+ s, ok := IPProto_name[uint8(x)]
if ok {
return s
}
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"`
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"`
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