From c0a91ff5a45fa086bd88f7a934c2dfc8f340acd0 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Mon, 6 Jul 2020 09:27:44 +0200 Subject: [PATCH 01/13] Generate binapi Signed-off-by: Ondrej Fabry --- .../vpp/binapi/vpp2005/ip6_nd/ip6_nd.ba.go | 405 ++++++++++++++++++ plugins/vpp/binapi/vpp2005/rd_cp/rd_cp.ba.go | 119 +++++ plugins/vpp/binapi/vpp2005/vpp2005.go | 19 +- 3 files changed, 538 insertions(+), 5 deletions(-) create mode 100644 plugins/vpp/binapi/vpp2005/ip6_nd/ip6_nd.ba.go create mode 100644 plugins/vpp/binapi/vpp2005/rd_cp/rd_cp.ba.go diff --git a/plugins/vpp/binapi/vpp2005/ip6_nd/ip6_nd.ba.go b/plugins/vpp/binapi/vpp2005/ip6_nd/ip6_nd.ba.go new file mode 100644 index 0000000000..a1178d7250 --- /dev/null +++ b/plugins/vpp/binapi/vpp2005/ip6_nd/ip6_nd.ba.go @@ -0,0 +1,405 @@ +// Code generated by GoVPP's binapi-generator. DO NOT EDIT. +// source: /usr/share/vpp/api/core/ip6_nd.api.json + +/* +Package ip6_nd is a generated VPP binary API for 'ip6_nd' module. + +It consists of: + 10 enums + 6 aliases + 7 types + 1 union + 13 messages + 6 services +*/ +package ip6_nd + +import ( + "bytes" + "context" + "io" + "strconv" + + api "git.fd.io/govpp.git/api" + struc "github.com/lunixbochs/struc" + + interface_types "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/interface_types" + ip_types "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip_types" +) + +const ( + // ModuleName is the name of this module. + ModuleName = "ip6_nd" + // APIVersion is the API version of this module. + APIVersion = "1.0.0" + // VersionCrc is the CRC of this module. + VersionCrc = 0x877c10de +) + +type AddressFamily = ip_types.AddressFamily + +type IfStatusFlags = interface_types.IfStatusFlags + +type IfType = interface_types.IfType + +type IPDscp = ip_types.IPDscp + +type IPEcn = ip_types.IPEcn + +type IPProto = ip_types.IPProto + +type LinkDuplex = interface_types.LinkDuplex + +type MtuProto = interface_types.MtuProto + +type RxMode = interface_types.RxMode + +type SubIfFlags = interface_types.SubIfFlags + +type AddressWithPrefix = ip_types.AddressWithPrefix + +type InterfaceIndex = interface_types.InterfaceIndex + +type IP4Address = ip_types.IP4Address + +type IP4AddressWithPrefix = ip_types.IP4AddressWithPrefix + +type IP6Address = ip_types.IP6Address + +type IP6AddressWithPrefix = ip_types.IP6AddressWithPrefix + +type Address = ip_types.Address + +type IP4Prefix = ip_types.IP4Prefix + +type IP6Prefix = ip_types.IP6Prefix + +// IP6RaPrefixInfo represents VPP binary API type 'ip6_ra_prefix_info'. +type IP6RaPrefixInfo struct { + Prefix Prefix + Flags uint8 + ValidTime uint32 + PreferredTime uint32 +} + +func (*IP6RaPrefixInfo) GetTypeName() string { return "ip6_ra_prefix_info" } + +type Mprefix = ip_types.Mprefix + +type Prefix = ip_types.Prefix + +type PrefixMatcher = ip_types.PrefixMatcher + +type AddressUnion = ip_types.AddressUnion + +// IP6RaEvent represents VPP binary API message 'ip6_ra_event'. +type IP6RaEvent struct { + PID uint32 + SwIfIndex InterfaceIndex + RouterAddr IP6Address + CurrentHopLimit uint8 + Flags uint8 + RouterLifetimeInSec uint16 + NeighborReachableTimeInMsec uint32 + TimeInMsecBetweenRetransmittedNeighborSolicitations uint32 + NPrefixes uint32 `struc:"sizeof=Prefixes"` + Prefixes []IP6RaPrefixInfo +} + +func (m *IP6RaEvent) Reset() { *m = IP6RaEvent{} } +func (*IP6RaEvent) GetMessageName() string { return "ip6_ra_event" } +func (*IP6RaEvent) GetCrcString() string { return "47e8cfbe" } +func (*IP6RaEvent) GetMessageType() api.MessageType { return api.EventMessage } + +// IP6ndProxyAddDel represents VPP binary API message 'ip6nd_proxy_add_del'. +type IP6ndProxyAddDel struct { + SwIfIndex InterfaceIndex + IsAdd bool + IP IP6Address +} + +func (m *IP6ndProxyAddDel) Reset() { *m = IP6ndProxyAddDel{} } +func (*IP6ndProxyAddDel) GetMessageName() string { return "ip6nd_proxy_add_del" } +func (*IP6ndProxyAddDel) GetCrcString() string { return "3fdf6659" } +func (*IP6ndProxyAddDel) GetMessageType() api.MessageType { return api.RequestMessage } + +// IP6ndProxyAddDelReply represents VPP binary API message 'ip6nd_proxy_add_del_reply'. +type IP6ndProxyAddDelReply struct { + Retval int32 +} + +func (m *IP6ndProxyAddDelReply) Reset() { *m = IP6ndProxyAddDelReply{} } +func (*IP6ndProxyAddDelReply) GetMessageName() string { return "ip6nd_proxy_add_del_reply" } +func (*IP6ndProxyAddDelReply) GetCrcString() string { return "e8d4e804" } +func (*IP6ndProxyAddDelReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +// IP6ndProxyDetails represents VPP binary API message 'ip6nd_proxy_details'. +type IP6ndProxyDetails struct { + SwIfIndex InterfaceIndex + IP IP6Address +} + +func (m *IP6ndProxyDetails) Reset() { *m = IP6ndProxyDetails{} } +func (*IP6ndProxyDetails) GetMessageName() string { return "ip6nd_proxy_details" } +func (*IP6ndProxyDetails) GetCrcString() string { return "d35be8ff" } +func (*IP6ndProxyDetails) GetMessageType() api.MessageType { return api.ReplyMessage } + +// IP6ndProxyDump represents VPP binary API message 'ip6nd_proxy_dump'. +type IP6ndProxyDump struct{} + +func (m *IP6ndProxyDump) Reset() { *m = IP6ndProxyDump{} } +func (*IP6ndProxyDump) GetMessageName() string { return "ip6nd_proxy_dump" } +func (*IP6ndProxyDump) GetCrcString() string { return "51077d14" } +func (*IP6ndProxyDump) GetMessageType() api.MessageType { return api.RequestMessage } + +// IP6ndSendRouterSolicitation represents VPP binary API message 'ip6nd_send_router_solicitation'. +type IP6ndSendRouterSolicitation struct { + Irt uint32 + Mrt uint32 + Mrc uint32 + Mrd uint32 + SwIfIndex InterfaceIndex + Stop bool +} + +func (m *IP6ndSendRouterSolicitation) Reset() { *m = IP6ndSendRouterSolicitation{} } +func (*IP6ndSendRouterSolicitation) GetMessageName() string { return "ip6nd_send_router_solicitation" } +func (*IP6ndSendRouterSolicitation) GetCrcString() string { return "e5de609c" } +func (*IP6ndSendRouterSolicitation) GetMessageType() api.MessageType { return api.RequestMessage } + +// IP6ndSendRouterSolicitationReply represents VPP binary API message 'ip6nd_send_router_solicitation_reply'. +type IP6ndSendRouterSolicitationReply struct { + Retval int32 +} + +func (m *IP6ndSendRouterSolicitationReply) Reset() { *m = IP6ndSendRouterSolicitationReply{} } +func (*IP6ndSendRouterSolicitationReply) GetMessageName() string { + return "ip6nd_send_router_solicitation_reply" +} +func (*IP6ndSendRouterSolicitationReply) GetCrcString() string { return "e8d4e804" } +func (*IP6ndSendRouterSolicitationReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +// SwInterfaceIP6ndRaConfig represents VPP binary API message 'sw_interface_ip6nd_ra_config'. +type SwInterfaceIP6ndRaConfig struct { + SwIfIndex InterfaceIndex + Suppress uint8 + Managed uint8 + Other uint8 + LlOption uint8 + SendUnicast uint8 + Cease uint8 + IsNo bool + DefaultRouter uint8 + MaxInterval uint32 + MinInterval uint32 + Lifetime uint32 + InitialCount uint32 + InitialInterval uint32 +} + +func (m *SwInterfaceIP6ndRaConfig) Reset() { *m = SwInterfaceIP6ndRaConfig{} } +func (*SwInterfaceIP6ndRaConfig) GetMessageName() string { return "sw_interface_ip6nd_ra_config" } +func (*SwInterfaceIP6ndRaConfig) GetCrcString() string { return "3eb00b1c" } +func (*SwInterfaceIP6ndRaConfig) GetMessageType() api.MessageType { return api.RequestMessage } + +// SwInterfaceIP6ndRaConfigReply represents VPP binary API message 'sw_interface_ip6nd_ra_config_reply'. +type SwInterfaceIP6ndRaConfigReply struct { + Retval int32 +} + +func (m *SwInterfaceIP6ndRaConfigReply) Reset() { *m = SwInterfaceIP6ndRaConfigReply{} } +func (*SwInterfaceIP6ndRaConfigReply) GetMessageName() string { + return "sw_interface_ip6nd_ra_config_reply" +} +func (*SwInterfaceIP6ndRaConfigReply) GetCrcString() string { return "e8d4e804" } +func (*SwInterfaceIP6ndRaConfigReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +// SwInterfaceIP6ndRaPrefix represents VPP binary API message 'sw_interface_ip6nd_ra_prefix'. +type SwInterfaceIP6ndRaPrefix struct { + SwIfIndex InterfaceIndex + Prefix Prefix + UseDefault bool + NoAdvertise bool + OffLink bool + NoAutoconfig bool + NoOnlink bool + IsNo bool + ValLifetime uint32 + PrefLifetime uint32 +} + +func (m *SwInterfaceIP6ndRaPrefix) Reset() { *m = SwInterfaceIP6ndRaPrefix{} } +func (*SwInterfaceIP6ndRaPrefix) GetMessageName() string { return "sw_interface_ip6nd_ra_prefix" } +func (*SwInterfaceIP6ndRaPrefix) GetCrcString() string { return "e098785f" } +func (*SwInterfaceIP6ndRaPrefix) GetMessageType() api.MessageType { return api.RequestMessage } + +// SwInterfaceIP6ndRaPrefixReply represents VPP binary API message 'sw_interface_ip6nd_ra_prefix_reply'. +type SwInterfaceIP6ndRaPrefixReply struct { + Retval int32 +} + +func (m *SwInterfaceIP6ndRaPrefixReply) Reset() { *m = SwInterfaceIP6ndRaPrefixReply{} } +func (*SwInterfaceIP6ndRaPrefixReply) GetMessageName() string { + return "sw_interface_ip6nd_ra_prefix_reply" +} +func (*SwInterfaceIP6ndRaPrefixReply) GetCrcString() string { return "e8d4e804" } +func (*SwInterfaceIP6ndRaPrefixReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +// WantIP6RaEvents represents VPP binary API message 'want_ip6_ra_events'. +type WantIP6RaEvents struct { + Enable bool + PID uint32 +} + +func (m *WantIP6RaEvents) Reset() { *m = WantIP6RaEvents{} } +func (*WantIP6RaEvents) GetMessageName() string { return "want_ip6_ra_events" } +func (*WantIP6RaEvents) GetCrcString() string { return "3ec6d6c2" } +func (*WantIP6RaEvents) GetMessageType() api.MessageType { return api.RequestMessage } + +// WantIP6RaEventsReply represents VPP binary API message 'want_ip6_ra_events_reply'. +type WantIP6RaEventsReply struct { + Retval int32 +} + +func (m *WantIP6RaEventsReply) Reset() { *m = WantIP6RaEventsReply{} } +func (*WantIP6RaEventsReply) GetMessageName() string { return "want_ip6_ra_events_reply" } +func (*WantIP6RaEventsReply) GetCrcString() string { return "e8d4e804" } +func (*WantIP6RaEventsReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +func init() { + api.RegisterMessage((*IP6RaEvent)(nil), "ip6_nd.IP6RaEvent") + api.RegisterMessage((*IP6ndProxyAddDel)(nil), "ip6_nd.IP6ndProxyAddDel") + api.RegisterMessage((*IP6ndProxyAddDelReply)(nil), "ip6_nd.IP6ndProxyAddDelReply") + api.RegisterMessage((*IP6ndProxyDetails)(nil), "ip6_nd.IP6ndProxyDetails") + api.RegisterMessage((*IP6ndProxyDump)(nil), "ip6_nd.IP6ndProxyDump") + api.RegisterMessage((*IP6ndSendRouterSolicitation)(nil), "ip6_nd.IP6ndSendRouterSolicitation") + api.RegisterMessage((*IP6ndSendRouterSolicitationReply)(nil), "ip6_nd.IP6ndSendRouterSolicitationReply") + api.RegisterMessage((*SwInterfaceIP6ndRaConfig)(nil), "ip6_nd.SwInterfaceIP6ndRaConfig") + api.RegisterMessage((*SwInterfaceIP6ndRaConfigReply)(nil), "ip6_nd.SwInterfaceIP6ndRaConfigReply") + api.RegisterMessage((*SwInterfaceIP6ndRaPrefix)(nil), "ip6_nd.SwInterfaceIP6ndRaPrefix") + api.RegisterMessage((*SwInterfaceIP6ndRaPrefixReply)(nil), "ip6_nd.SwInterfaceIP6ndRaPrefixReply") + api.RegisterMessage((*WantIP6RaEvents)(nil), "ip6_nd.WantIP6RaEvents") + api.RegisterMessage((*WantIP6RaEventsReply)(nil), "ip6_nd.WantIP6RaEventsReply") +} + +// Messages returns list of all messages in this module. +func AllMessages() []api.Message { + return []api.Message{ + (*IP6RaEvent)(nil), + (*IP6ndProxyAddDel)(nil), + (*IP6ndProxyAddDelReply)(nil), + (*IP6ndProxyDetails)(nil), + (*IP6ndProxyDump)(nil), + (*IP6ndSendRouterSolicitation)(nil), + (*IP6ndSendRouterSolicitationReply)(nil), + (*SwInterfaceIP6ndRaConfig)(nil), + (*SwInterfaceIP6ndRaConfigReply)(nil), + (*SwInterfaceIP6ndRaPrefix)(nil), + (*SwInterfaceIP6ndRaPrefixReply)(nil), + (*WantIP6RaEvents)(nil), + (*WantIP6RaEventsReply)(nil), + } +} + +// RPCService represents RPC service API for ip6_nd module. +type RPCService interface { + DumpIP6ndProxy(ctx context.Context, in *IP6ndProxyDump) (RPCService_DumpIP6ndProxyClient, error) + IP6ndProxyAddDel(ctx context.Context, in *IP6ndProxyAddDel) (*IP6ndProxyAddDelReply, error) + IP6ndSendRouterSolicitation(ctx context.Context, in *IP6ndSendRouterSolicitation) (*IP6ndSendRouterSolicitationReply, error) + SwInterfaceIP6ndRaConfig(ctx context.Context, in *SwInterfaceIP6ndRaConfig) (*SwInterfaceIP6ndRaConfigReply, error) + SwInterfaceIP6ndRaPrefix(ctx context.Context, in *SwInterfaceIP6ndRaPrefix) (*SwInterfaceIP6ndRaPrefixReply, error) + WantIP6RaEvents(ctx context.Context, in *WantIP6RaEvents) (*WantIP6RaEventsReply, error) +} + +type serviceClient struct { + ch api.Channel +} + +func NewServiceClient(ch api.Channel) RPCService { + return &serviceClient{ch} +} + +func (c *serviceClient) DumpIP6ndProxy(ctx context.Context, in *IP6ndProxyDump) (RPCService_DumpIP6ndProxyClient, error) { + stream := c.ch.SendMultiRequest(in) + x := &serviceClient_DumpIP6ndProxyClient{stream} + return x, nil +} + +type RPCService_DumpIP6ndProxyClient interface { + Recv() (*IP6ndProxyDetails, error) +} + +type serviceClient_DumpIP6ndProxyClient struct { + api.MultiRequestCtx +} + +func (c *serviceClient_DumpIP6ndProxyClient) Recv() (*IP6ndProxyDetails, error) { + m := new(IP6ndProxyDetails) + stop, err := c.MultiRequestCtx.ReceiveReply(m) + if err != nil { + return nil, err + } + if stop { + return nil, io.EOF + } + return m, nil +} + +func (c *serviceClient) IP6ndProxyAddDel(ctx context.Context, in *IP6ndProxyAddDel) (*IP6ndProxyAddDelReply, error) { + out := new(IP6ndProxyAddDelReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) IP6ndSendRouterSolicitation(ctx context.Context, in *IP6ndSendRouterSolicitation) (*IP6ndSendRouterSolicitationReply, error) { + out := new(IP6ndSendRouterSolicitationReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) SwInterfaceIP6ndRaConfig(ctx context.Context, in *SwInterfaceIP6ndRaConfig) (*SwInterfaceIP6ndRaConfigReply, error) { + out := new(SwInterfaceIP6ndRaConfigReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) SwInterfaceIP6ndRaPrefix(ctx context.Context, in *SwInterfaceIP6ndRaPrefix) (*SwInterfaceIP6ndRaPrefixReply, error) { + out := new(SwInterfaceIP6ndRaPrefixReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) WantIP6RaEvents(ctx context.Context, in *WantIP6RaEvents) (*WantIP6RaEventsReply, error) { + out := new(WantIP6RaEventsReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the GoVPP api package it is being compiled against. +// A compilation error at this line likely means your copy of the +// GoVPP api package needs to be updated. +const _ = api.GoVppAPIPackageIsVersion1 // please upgrade the GoVPP api package + +// Reference imports to suppress errors if they are not otherwise used. +var _ = api.RegisterMessage +var _ = bytes.NewBuffer +var _ = context.Background +var _ = io.Copy +var _ = strconv.Itoa +var _ = struc.Pack diff --git a/plugins/vpp/binapi/vpp2005/rd_cp/rd_cp.ba.go b/plugins/vpp/binapi/vpp2005/rd_cp/rd_cp.ba.go new file mode 100644 index 0000000000..921cc00637 --- /dev/null +++ b/plugins/vpp/binapi/vpp2005/rd_cp/rd_cp.ba.go @@ -0,0 +1,119 @@ +// Code generated by GoVPP's binapi-generator. DO NOT EDIT. +// source: /usr/share/vpp/api/core/rd_cp.api.json + +/* +Package rd_cp is a generated VPP binary API for 'rd_cp' module. + +It consists of: + 6 enums + 1 alias + 2 messages + 1 service +*/ +package rd_cp + +import ( + "bytes" + "context" + "io" + "strconv" + + api "git.fd.io/govpp.git/api" + struc "github.com/lunixbochs/struc" + + interface_types "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/interface_types" +) + +const ( + // ModuleName is the name of this module. + ModuleName = "rd_cp" + // APIVersion is the API version of this module. + APIVersion = "1.0.1" + // VersionCrc is the CRC of this module. + VersionCrc = 0x2caa616 +) + +type IfStatusFlags = interface_types.IfStatusFlags + +type IfType = interface_types.IfType + +type LinkDuplex = interface_types.LinkDuplex + +type MtuProto = interface_types.MtuProto + +type RxMode = interface_types.RxMode + +type SubIfFlags = interface_types.SubIfFlags + +type InterfaceIndex = interface_types.InterfaceIndex + +// IP6NdAddressAutoconfig represents VPP binary API message 'ip6_nd_address_autoconfig'. +type IP6NdAddressAutoconfig struct { + SwIfIndex InterfaceIndex + Enable bool + InstallDefaultRoutes bool +} + +func (m *IP6NdAddressAutoconfig) Reset() { *m = IP6NdAddressAutoconfig{} } +func (*IP6NdAddressAutoconfig) GetMessageName() string { return "ip6_nd_address_autoconfig" } +func (*IP6NdAddressAutoconfig) GetCrcString() string { return "9e14a4a7" } +func (*IP6NdAddressAutoconfig) GetMessageType() api.MessageType { return api.RequestMessage } + +// IP6NdAddressAutoconfigReply represents VPP binary API message 'ip6_nd_address_autoconfig_reply'. +type IP6NdAddressAutoconfigReply struct { + Retval int32 +} + +func (m *IP6NdAddressAutoconfigReply) Reset() { *m = IP6NdAddressAutoconfigReply{} } +func (*IP6NdAddressAutoconfigReply) GetMessageName() string { return "ip6_nd_address_autoconfig_reply" } +func (*IP6NdAddressAutoconfigReply) GetCrcString() string { return "e8d4e804" } +func (*IP6NdAddressAutoconfigReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +func init() { + api.RegisterMessage((*IP6NdAddressAutoconfig)(nil), "rd_cp.IP6NdAddressAutoconfig") + api.RegisterMessage((*IP6NdAddressAutoconfigReply)(nil), "rd_cp.IP6NdAddressAutoconfigReply") +} + +// Messages returns list of all messages in this module. +func AllMessages() []api.Message { + return []api.Message{ + (*IP6NdAddressAutoconfig)(nil), + (*IP6NdAddressAutoconfigReply)(nil), + } +} + +// RPCService represents RPC service API for rd_cp module. +type RPCService interface { + IP6NdAddressAutoconfig(ctx context.Context, in *IP6NdAddressAutoconfig) (*IP6NdAddressAutoconfigReply, error) +} + +type serviceClient struct { + ch api.Channel +} + +func NewServiceClient(ch api.Channel) RPCService { + return &serviceClient{ch} +} + +func (c *serviceClient) IP6NdAddressAutoconfig(ctx context.Context, in *IP6NdAddressAutoconfig) (*IP6NdAddressAutoconfigReply, error) { + out := new(IP6NdAddressAutoconfigReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the GoVPP api package it is being compiled against. +// A compilation error at this line likely means your copy of the +// GoVPP api package needs to be updated. +const _ = api.GoVppAPIPackageIsVersion1 // please upgrade the GoVPP api package + +// Reference imports to suppress errors if they are not otherwise used. +var _ = api.RegisterMessage +var _ = bytes.NewBuffer +var _ = context.Background +var _ = io.Copy +var _ = strconv.Itoa +var _ = struc.Pack diff --git a/plugins/vpp/binapi/vpp2005/vpp2005.go b/plugins/vpp/binapi/vpp2005/vpp2005.go index 77b9d48cb2..e8a74bb66c 100644 --- a/plugins/vpp/binapi/vpp2005/vpp2005.go +++ b/plugins/vpp/binapi/vpp2005/vpp2005.go @@ -17,10 +17,10 @@ package vpp2005 import ( "go.ligato.io/vpp-agent/v3/plugins/vpp" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi" - "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/abf" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/acl" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/af_packet" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/arp" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/bond" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/dhcp" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/flowprobe" @@ -28,6 +28,8 @@ import ( "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/gtpu" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/interfaces" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip6_nd" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip_neighbor" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ipfix_export" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ipip" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ipsec" @@ -37,6 +39,7 @@ import ( "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/memif" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/nat" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/punt" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/rd_cp" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/span" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/sr" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/stn" @@ -55,15 +58,20 @@ func init() { binapi.Versions[Version] = binapi.VersionMsgs{ Core: vpp.Messages( af_packet.AllMessages, + arp.AllMessages, bond.AllMessages, gre.AllMessages, interfaces.AllMessages, ip.AllMessages, - ipsec.AllMessages, + ip6_nd.AllMessages, + ip_neighbor.AllMessages, ipfix_export.AllMessages, + ipip.AllMessages, + ipsec.AllMessages, l2.AllMessages, memclnt.AllMessages, punt.AllMessages, + rd_cp.AllMessages, span.AllMessages, sr.AllMessages, tapv2.AllMessages, @@ -71,7 +79,6 @@ func init() { vpe.AllMessages, vxlan.AllMessages, vxlan_gpe.AllMessages, - ipip.AllMessages, ), Plugins: vpp.Messages( abf.AllMessages, @@ -103,12 +110,15 @@ func init() { //go:generate binapigen --input-file=$VPP_API_DIR/core/gre.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/interface.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/ip.api.json +//go:generate binapigen --input-file=$VPP_API_DIR/core/ip6_nd.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/ip_neighbor.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/ipfix_export.api.json +//go:generate binapigen --input-file=$VPP_API_DIR/core/ipip.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/ipsec.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/l2.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/memclnt.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/punt.api.json +//go:generate binapigen --input-file=$VPP_API_DIR/core/rd_cp.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/span.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/sr.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/tapv2.api.json @@ -116,12 +126,11 @@ func init() { //go:generate binapigen --input-file=$VPP_API_DIR/core/vpe.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/vxlan.api.json //go:generate binapigen --input-file=$VPP_API_DIR/core/vxlan_gpe.api.json -//go:generate binapigen --input-file=$VPP_API_DIR/core/ipip.api.json //go:generate binapigen --input-file=$VPP_API_DIR/plugins/abf.api.json //go:generate binapigen --input-file=$VPP_API_DIR/plugins/acl.api.json -//go:generate binapigen --input-file=$VPP_API_DIR/plugins/gtpu.api.json //go:generate binapigen --input-file=$VPP_API_DIR/plugins/dhcp.api.json //go:generate binapigen --input-file=$VPP_API_DIR/plugins/flowprobe.api.json +//go:generate binapigen --input-file=$VPP_API_DIR/plugins/gtpu.api.json //go:generate binapigen --input-file=$VPP_API_DIR/plugins/l3xc.api.json //go:generate binapigen --input-file=$VPP_API_DIR/plugins/memif.api.json //go:generate binapigen --input-file=$VPP_API_DIR/plugins/nat.api.json From 2dfd6c84523b8357e4272e88ffac7c184ec56a25 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Mon, 6 Jul 2020 10:43:15 +0200 Subject: [PATCH 02/13] Optimize imports in generated adapter packages Signed-off-by: Ondrej Fabry --- .../mock_plugins/ifplugin/descriptor/adapter/interface.go | 2 +- .../mock_plugins/l2plugin/descriptor/adapter/bdinterface.go | 2 +- .../mock_plugins/l2plugin/descriptor/adapter/bridgedomain.go | 2 +- .../mock_plugins/l2plugin/descriptor/adapter/fib.go | 2 +- .../with_metadata/descriptor/adapter/skeleton.go | 4 ++-- .../without_metadata/descriptor/adapter/skeleton.go | 2 +- examples/tutorials/05_kv-scheduler/adapter/interface.go | 2 +- examples/tutorials/05_kv-scheduler/adapter/route.go | 2 +- plugins/linux/ifplugin/descriptor/adapter/interface.go | 2 +- plugins/vpp/abfplugin/descriptor/adapter/abf.go | 2 +- plugins/vpp/l2plugin/descriptor/adapter/bridgedomain.go | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/kvscheduler/mock_plugins/ifplugin/descriptor/adapter/interface.go b/examples/kvscheduler/mock_plugins/ifplugin/descriptor/adapter/interface.go index 08ee42d516..d146d5dc97 100644 --- a/examples/kvscheduler/mock_plugins/ifplugin/descriptor/adapter/interface.go +++ b/examples/kvscheduler/mock_plugins/ifplugin/descriptor/adapter/interface.go @@ -4,9 +4,9 @@ package adapter import ( "github.com/golang/protobuf/proto" + . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" "go.ligato.io/vpp-agent/v3/examples/kvscheduler/mock_plugins/ifplugin/model" "go.ligato.io/vpp-agent/v3/pkg/idxvpp" - . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" ) ////////// type-safe key-value pair with metadata ////////// diff --git a/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/bdinterface.go b/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/bdinterface.go index 5df01c1760..e6aba14b5d 100644 --- a/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/bdinterface.go +++ b/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/bdinterface.go @@ -4,8 +4,8 @@ package adapter import ( "github.com/golang/protobuf/proto" - "go.ligato.io/vpp-agent/v3/examples/kvscheduler/mock_plugins/l2plugin/model" . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" + "go.ligato.io/vpp-agent/v3/examples/kvscheduler/mock_plugins/l2plugin/model" ) ////////// type-safe key-value pair with metadata ////////// diff --git a/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/bridgedomain.go b/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/bridgedomain.go index 01c6bd3367..cd8b554588 100644 --- a/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/bridgedomain.go +++ b/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/bridgedomain.go @@ -4,9 +4,9 @@ package adapter import ( "github.com/golang/protobuf/proto" + . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" "go.ligato.io/vpp-agent/v3/examples/kvscheduler/mock_plugins/l2plugin/model" "go.ligato.io/vpp-agent/v3/pkg/idxvpp" - . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" ) ////////// type-safe key-value pair with metadata ////////// diff --git a/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/fib.go b/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/fib.go index b0b94adf26..16cf79fe24 100644 --- a/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/fib.go +++ b/examples/kvscheduler/mock_plugins/l2plugin/descriptor/adapter/fib.go @@ -4,8 +4,8 @@ package adapter import ( "github.com/golang/protobuf/proto" - "go.ligato.io/vpp-agent/v3/examples/kvscheduler/mock_plugins/l2plugin/model" . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" + "go.ligato.io/vpp-agent/v3/examples/kvscheduler/mock_plugins/l2plugin/model" ) ////////// type-safe key-value pair with metadata ////////// diff --git a/examples/kvscheduler/plugin_skeleton/with_metadata/descriptor/adapter/skeleton.go b/examples/kvscheduler/plugin_skeleton/with_metadata/descriptor/adapter/skeleton.go index 82d3a07bdf..0cf6336907 100644 --- a/examples/kvscheduler/plugin_skeleton/with_metadata/descriptor/adapter/skeleton.go +++ b/examples/kvscheduler/plugin_skeleton/with_metadata/descriptor/adapter/skeleton.go @@ -4,9 +4,9 @@ package adapter import ( "github.com/golang/protobuf/proto" - "go.ligato.io/vpp-agent/v3/examples/kvscheduler/plugin_skeleton/with_metadata/metaidx" - "go.ligato.io/vpp-agent/v3/examples/kvscheduler/plugin_skeleton/with_metadata/model" . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" + "go.ligato.io/vpp-agent/v3/examples/kvscheduler/plugin_skeleton/with_metadata/model" + "go.ligato.io/vpp-agent/v3/examples/kvscheduler/plugin_skeleton/with_metadata/metaidx" ) ////////// type-safe key-value pair with metadata ////////// diff --git a/examples/kvscheduler/plugin_skeleton/without_metadata/descriptor/adapter/skeleton.go b/examples/kvscheduler/plugin_skeleton/without_metadata/descriptor/adapter/skeleton.go index d2c992499c..da6e7dc291 100644 --- a/examples/kvscheduler/plugin_skeleton/without_metadata/descriptor/adapter/skeleton.go +++ b/examples/kvscheduler/plugin_skeleton/without_metadata/descriptor/adapter/skeleton.go @@ -4,8 +4,8 @@ package adapter import ( "github.com/golang/protobuf/proto" - "go.ligato.io/vpp-agent/v3/examples/kvscheduler/plugin_skeleton/without_metadata/model" . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" + "go.ligato.io/vpp-agent/v3/examples/kvscheduler/plugin_skeleton/without_metadata/model" ) ////////// type-safe key-value pair with metadata ////////// diff --git a/examples/tutorials/05_kv-scheduler/adapter/interface.go b/examples/tutorials/05_kv-scheduler/adapter/interface.go index 9a1754ff70..edf15bca2d 100644 --- a/examples/tutorials/05_kv-scheduler/adapter/interface.go +++ b/examples/tutorials/05_kv-scheduler/adapter/interface.go @@ -4,8 +4,8 @@ package adapter import ( "github.com/golang/protobuf/proto" - "go.ligato.io/vpp-agent/v3/examples/tutorials/05_kv-scheduler/model" . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" + "go.ligato.io/vpp-agent/v3/examples/tutorials/05_kv-scheduler/model" ) ////////// type-safe key-value pair with metadata ////////// diff --git a/examples/tutorials/05_kv-scheduler/adapter/route.go b/examples/tutorials/05_kv-scheduler/adapter/route.go index c484e14101..ea6522e27b 100644 --- a/examples/tutorials/05_kv-scheduler/adapter/route.go +++ b/examples/tutorials/05_kv-scheduler/adapter/route.go @@ -4,8 +4,8 @@ package adapter import ( "github.com/golang/protobuf/proto" - "go.ligato.io/vpp-agent/v3/examples/tutorials/05_kv-scheduler/model" . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" + "go.ligato.io/vpp-agent/v3/examples/tutorials/05_kv-scheduler/model" ) ////////// type-safe key-value pair with metadata ////////// diff --git a/plugins/linux/ifplugin/descriptor/adapter/interface.go b/plugins/linux/ifplugin/descriptor/adapter/interface.go index e5c79e2eca..3e9e2859c8 100644 --- a/plugins/linux/ifplugin/descriptor/adapter/interface.go +++ b/plugins/linux/ifplugin/descriptor/adapter/interface.go @@ -5,8 +5,8 @@ package adapter import ( "github.com/golang/protobuf/proto" . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" - "go.ligato.io/vpp-agent/v3/plugins/linux/ifplugin/ifaceidx" "go.ligato.io/vpp-agent/v3/proto/ligato/linux/interfaces" + "go.ligato.io/vpp-agent/v3/plugins/linux/ifplugin/ifaceidx" ) ////////// type-safe key-value pair with metadata ////////// diff --git a/plugins/vpp/abfplugin/descriptor/adapter/abf.go b/plugins/vpp/abfplugin/descriptor/adapter/abf.go index 7dc43fafbb..732d06ba83 100644 --- a/plugins/vpp/abfplugin/descriptor/adapter/abf.go +++ b/plugins/vpp/abfplugin/descriptor/adapter/abf.go @@ -6,7 +6,7 @@ import ( "github.com/golang/protobuf/proto" . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" "go.ligato.io/vpp-agent/v3/plugins/vpp/abfplugin/abfidx" - vpp_abf "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/abf" + "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/abf" ) ////////// type-safe key-value pair with metadata ////////// diff --git a/plugins/vpp/l2plugin/descriptor/adapter/bridgedomain.go b/plugins/vpp/l2plugin/descriptor/adapter/bridgedomain.go index a1d4181b2b..8bc86ce63b 100644 --- a/plugins/vpp/l2plugin/descriptor/adapter/bridgedomain.go +++ b/plugins/vpp/l2plugin/descriptor/adapter/bridgedomain.go @@ -4,8 +4,8 @@ package adapter import ( "github.com/golang/protobuf/proto" - "go.ligato.io/vpp-agent/v3/pkg/idxvpp" . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" + "go.ligato.io/vpp-agent/v3/pkg/idxvpp" "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l2" ) From 12bcbab76f16bb0f3ccd4fbcdfd3db052b9af44a Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Mon, 6 Jul 2020 10:43:39 +0200 Subject: [PATCH 03/13] Define IP6ND model Signed-off-by: Ondrej Fabry --- proto/ligato/vpp/l3/l3.pb.go | 138 +++++++++++++++----- proto/ligato/vpp/l3/l3.proto | 14 ++ proto/ligato/vpp/l3/models.go | 15 +++ proto/ligato/vpp/vpp.pb.go | 233 ++++++++++++++-------------------- proto/ligato/vpp/vpp.proto | 1 + 5 files changed, 228 insertions(+), 173 deletions(-) diff --git a/proto/ligato/vpp/l3/l3.pb.go b/proto/ligato/vpp/l3/l3.pb.go index 28711aac14..70615ed837 100644 --- a/proto/ligato/vpp/l3/l3.pb.go +++ b/proto/ligato/vpp/l3/l3.pb.go @@ -51,7 +51,9 @@ func (IPScanNeighbor_Mode) EnumDescriptor() ([]byte, []int) { return fileDescriptor_eb46f906a6f7c0e7, []int{1, 0} } +// ARP Proxy type ProxyARP struct { + // List of interfaces proxy ARP is enabled for. Interfaces []*ProxyARP_Interface `protobuf:"bytes,1,rep,name=interfaces,proto3" json:"interfaces,omitempty"` Ranges []*ProxyARP_Range `protobuf:"bytes,2,rep,name=ranges,proto3" json:"ranges,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -192,6 +194,7 @@ func (m *ProxyARP_Range) GetVrfId() uint32 { return 0 } +// IP Neighbour Config type IPScanNeighbor struct { Mode IPScanNeighbor_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=ligato.vpp.l3.IPScanNeighbor_Mode" json:"mode,omitempty"` ScanInterval uint32 `protobuf:"varint,2,opt,name=scan_interval,json=scanInterval,proto3" json:"scan_interval,omitempty"` @@ -271,6 +274,7 @@ func (m *IPScanNeighbor) GetStaleThreshold() uint32 { return 0 } +// DHCP Proxy type DHCPProxy struct { SourceIpAddress string `protobuf:"bytes,1,opt,name=source_ip_address,json=sourceIpAddress,proto3" json:"source_ip_address,omitempty"` RxVrfId uint32 `protobuf:"varint,2,opt,name=rx_vrf_id,json=rxVrfId,proto3" json:"rx_vrf_id,omitempty"` @@ -373,6 +377,65 @@ func (m *DHCPProxy_DHCPServer) GetIpAddress() string { return "" } +// IPv6 Neighbor Discovery +type IP6ND struct { + // Name of interface this config applies to. + Interface string `protobuf:"bytes,1,opt,name=interface,proto3" json:"interface,omitempty"` + // Enable IPv6 ND address autoconfiguration. + Autoconfig bool `protobuf:"varint,2,opt,name=autoconfig,proto3" json:"autoconfig,omitempty"` + // Enable installing default routes. + InstallDefaultRoutes bool `protobuf:"varint,3,opt,name=install_default_routes,json=installDefaultRoutes,proto3" json:"install_default_routes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *IP6ND) Reset() { *m = IP6ND{} } +func (m *IP6ND) String() string { return proto.CompactTextString(m) } +func (*IP6ND) ProtoMessage() {} +func (*IP6ND) Descriptor() ([]byte, []int) { + return fileDescriptor_eb46f906a6f7c0e7, []int{3} +} + +func (m *IP6ND) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_IP6ND.Unmarshal(m, b) +} +func (m *IP6ND) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_IP6ND.Marshal(b, m, deterministic) +} +func (m *IP6ND) XXX_Merge(src proto.Message) { + xxx_messageInfo_IP6ND.Merge(m, src) +} +func (m *IP6ND) XXX_Size() int { + return xxx_messageInfo_IP6ND.Size(m) +} +func (m *IP6ND) XXX_DiscardUnknown() { + xxx_messageInfo_IP6ND.DiscardUnknown(m) +} + +var xxx_messageInfo_IP6ND proto.InternalMessageInfo + +func (m *IP6ND) GetInterface() string { + if m != nil { + return m.Interface + } + return "" +} + +func (m *IP6ND) GetAutoconfig() bool { + if m != nil { + return m.Autoconfig + } + return false +} + +func (m *IP6ND) GetInstallDefaultRoutes() bool { + if m != nil { + return m.InstallDefaultRoutes + } + return false +} + func init() { proto.RegisterEnum("ligato.vpp.l3.IPScanNeighbor_Mode", IPScanNeighbor_Mode_name, IPScanNeighbor_Mode_value) proto.RegisterType((*ProxyARP)(nil), "ligato.vpp.l3.ProxyARP") @@ -381,44 +444,49 @@ func init() { proto.RegisterType((*IPScanNeighbor)(nil), "ligato.vpp.l3.IPScanNeighbor") proto.RegisterType((*DHCPProxy)(nil), "ligato.vpp.l3.DHCPProxy") proto.RegisterType((*DHCPProxy_DHCPServer)(nil), "ligato.vpp.l3.DHCPProxy.DHCPServer") + proto.RegisterType((*IP6ND)(nil), "ligato.vpp.l3.IP6ND") } func init() { proto.RegisterFile("ligato/vpp/l3/l3.proto", fileDescriptor_eb46f906a6f7c0e7) } var fileDescriptor_eb46f906a6f7c0e7 = []byte{ - // 533 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x93, 0xdf, 0x8a, 0x9b, 0x40, - 0x14, 0xc6, 0x6b, 0x62, 0xb2, 0xf1, 0xe4, 0xcf, 0xa6, 0x03, 0x2d, 0x12, 0x58, 0x9a, 0xba, 0x85, - 0x86, 0x42, 0x15, 0xe2, 0x36, 0x37, 0xa5, 0x17, 0x49, 0x53, 0x58, 0xa1, 0x7f, 0xc4, 0xa4, 0x7b, - 0xd1, 0x1b, 0x99, 0x75, 0x26, 0x89, 0xa0, 0x8e, 0xcc, 0xb8, 0xe2, 0x3e, 0x43, 0x1f, 0xa7, 0xef, - 0xd2, 0xe7, 0x29, 0x8e, 0xba, 0x4d, 0x16, 0xf6, 0xee, 0xf0, 0xf9, 0xfb, 0x3c, 0x67, 0xce, 0x37, - 0x03, 0x2f, 0xa3, 0x70, 0x8f, 0x33, 0x66, 0xe5, 0x69, 0x6a, 0x45, 0xb6, 0x15, 0xd9, 0x66, 0xca, - 0x59, 0xc6, 0xd0, 0xb0, 0xd2, 0xcd, 0x3c, 0x4d, 0xcd, 0xc8, 0x36, 0x7e, 0xb7, 0xa0, 0xe7, 0x72, - 0x56, 0xdc, 0x2f, 0x3d, 0x17, 0x2d, 0x01, 0xc2, 0x24, 0xa3, 0x7c, 0x87, 0x03, 0x2a, 0x74, 0x65, - 0xda, 0x9e, 0xf5, 0xe7, 0xaf, 0xcd, 0x13, 0x83, 0xd9, 0xc0, 0xa6, 0xd3, 0x90, 0xde, 0x91, 0x09, - 0x7d, 0x80, 0x2e, 0xc7, 0xc9, 0x9e, 0x0a, 0xbd, 0x25, 0xed, 0x17, 0x4f, 0xd9, 0xbd, 0x92, 0xf2, - 0x6a, 0x78, 0xf2, 0x0a, 0xb4, 0x87, 0xff, 0x21, 0x04, 0x6a, 0x82, 0x63, 0xaa, 0x2b, 0x53, 0x65, - 0xa6, 0x79, 0xb2, 0x9e, 0x10, 0xe8, 0x48, 0x07, 0x32, 0x60, 0xb8, 0x0b, 0xb9, 0xc8, 0xfc, 0x30, - 0xf5, 0x31, 0x21, 0xbc, 0xa6, 0xfa, 0x52, 0x74, 0xd2, 0x25, 0x21, 0x1c, 0x4d, 0x61, 0x10, 0xe1, - 0x23, 0xa4, 0x25, 0x11, 0x28, 0xb5, 0x9a, 0x78, 0x01, 0xdd, 0x9c, 0xef, 0xfc, 0x90, 0xe8, 0xed, - 0xa9, 0x32, 0x1b, 0x7a, 0x9d, 0x9c, 0xef, 0x1c, 0x62, 0xfc, 0x69, 0xc1, 0xc8, 0x71, 0x37, 0x01, - 0x4e, 0xbe, 0xd3, 0x70, 0x7f, 0xb8, 0x65, 0x1c, 0x2d, 0x40, 0x8d, 0x19, 0xa9, 0x86, 0x19, 0xcd, - 0x8d, 0x47, 0xc7, 0x39, 0x85, 0xcd, 0x6f, 0x8c, 0x50, 0x4f, 0xf2, 0xe8, 0x12, 0x86, 0x22, 0xc0, - 0x89, 0x2f, 0x77, 0x93, 0xe3, 0x48, 0x0e, 0x31, 0xf4, 0x06, 0xa5, 0xe8, 0xd4, 0x5a, 0x79, 0x98, - 0x18, 0x17, 0x7e, 0xca, 0x59, 0xe0, 0x67, 0x61, 0x4c, 0xeb, 0x69, 0xfa, 0x31, 0x2e, 0x5c, 0xce, - 0x82, 0x6d, 0x18, 0x53, 0x74, 0x01, 0x50, 0x32, 0x77, 0x29, 0xc1, 0x19, 0xd5, 0x55, 0x09, 0x68, - 0x31, 0x2e, 0x7e, 0x4a, 0x01, 0xbd, 0x81, 0x51, 0xd3, 0xc7, 0x27, 0x34, 0xc2, 0xf7, 0x7a, 0xe7, - 0xa4, 0xd1, 0xba, 0xd4, 0xd0, 0x5b, 0x38, 0x17, 0x19, 0x8e, 0xa8, 0x9f, 0x1d, 0x38, 0x15, 0x07, - 0x16, 0x11, 0xbd, 0x2b, 0xb1, 0x91, 0x94, 0xb7, 0x8d, 0x6a, 0xcc, 0x41, 0x2d, 0x0f, 0x81, 0x06, - 0xd0, 0x5b, 0x3b, 0x9b, 0xe5, 0xea, 0xeb, 0x97, 0xf5, 0xf8, 0x19, 0xea, 0x81, 0xea, 0xb8, 0x37, - 0x57, 0x63, 0xa5, 0xae, 0x16, 0xe3, 0x56, 0x59, 0xad, 0x7e, 0x6c, 0xaf, 0xc7, 0x6d, 0xe3, 0xaf, - 0x02, 0xda, 0xfa, 0xfa, 0xb3, 0x2b, 0xb3, 0x45, 0xef, 0xe0, 0xb9, 0x60, 0x77, 0x3c, 0xa0, 0xcd, - 0xfa, 0xa9, 0x10, 0x75, 0x48, 0xe7, 0xd5, 0x87, 0x2a, 0x03, 0x2a, 0x04, 0x9a, 0x80, 0xc6, 0x0b, - 0xbf, 0x4e, 0xa2, 0x5a, 0xd0, 0x19, 0x2f, 0x6e, 0xca, 0x2c, 0xd0, 0x27, 0x38, 0x13, 0x94, 0xe7, - 0x94, 0x0b, 0x5d, 0x95, 0x57, 0xe9, 0xf2, 0xd1, 0xee, 0x1f, 0x5a, 0xca, 0x6a, 0x23, 0x59, 0xaf, - 0xf1, 0x4c, 0x56, 0x00, 0xff, 0xe5, 0xa3, 0xbc, 0x95, 0xa3, 0xbc, 0xcb, 0xdd, 0x1e, 0x0d, 0x59, - 0x5d, 0x13, 0x2d, 0x6c, 0xc6, 0x5b, 0x2d, 0x7e, 0x5d, 0xed, 0x59, 0xd3, 0x35, 0x94, 0x6f, 0xe9, - 0x3d, 0xde, 0xd3, 0x24, 0xb3, 0x72, 0xdb, 0x92, 0xcf, 0xc9, 0x3a, 0x79, 0x65, 0x1f, 0xf3, 0x34, - 0xf5, 0x23, 0xfb, 0xb6, 0x2b, 0xbf, 0xd9, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x09, 0xdd, 0xc0, - 0x18, 0x84, 0x03, 0x00, 0x00, + // 597 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x93, 0x51, 0x6f, 0xd3, 0x30, + 0x10, 0xc7, 0x49, 0xd7, 0x76, 0xcd, 0x6d, 0xed, 0x8a, 0x05, 0x53, 0x54, 0x31, 0x28, 0x19, 0x12, + 0x13, 0x12, 0xa9, 0xb4, 0x8e, 0xbe, 0x20, 0x1e, 0x5a, 0x8a, 0xb4, 0x48, 0x30, 0xa2, 0x6c, 0xec, + 0x81, 0x97, 0xc8, 0x8b, 0xdd, 0xce, 0x92, 0x13, 0x47, 0xb6, 0x1b, 0x75, 0xe2, 0x23, 0xf0, 0x71, + 0xf8, 0x2e, 0x7c, 0x1e, 0x14, 0x27, 0xd9, 0xda, 0x49, 0xbc, 0x9d, 0xfe, 0xf7, 0x3b, 0xfb, 0xee, + 0xfe, 0x36, 0x1c, 0x72, 0xb6, 0xc4, 0x5a, 0x8c, 0xf2, 0x2c, 0x1b, 0xf1, 0xf1, 0x88, 0x8f, 0xbd, + 0x4c, 0x0a, 0x2d, 0x50, 0xb7, 0xd4, 0xbd, 0x3c, 0xcb, 0x3c, 0x3e, 0x76, 0x7f, 0x37, 0xa0, 0x13, + 0x48, 0xb1, 0xbe, 0x9b, 0x86, 0x01, 0x9a, 0x02, 0xb0, 0x54, 0x53, 0xb9, 0xc0, 0x31, 0x55, 0x8e, + 0x35, 0xdc, 0x39, 0xd9, 0x3b, 0x7d, 0xed, 0x6d, 0x15, 0x78, 0x35, 0xec, 0xf9, 0x35, 0x19, 0x6e, + 0x14, 0xa1, 0x0f, 0xd0, 0x96, 0x38, 0x5d, 0x52, 0xe5, 0x34, 0x4c, 0xf9, 0xd1, 0xff, 0xca, 0xc3, + 0x82, 0x0a, 0x2b, 0x78, 0xf0, 0x0a, 0xec, 0xfb, 0xf3, 0x10, 0x82, 0x66, 0x8a, 0x13, 0xea, 0x58, + 0x43, 0xeb, 0xc4, 0x0e, 0x4d, 0x3c, 0x20, 0xd0, 0x32, 0x15, 0xc8, 0x85, 0xee, 0x82, 0x49, 0xa5, + 0x23, 0x96, 0x45, 0x98, 0x10, 0x59, 0x51, 0x7b, 0x46, 0xf4, 0xb3, 0x29, 0x21, 0x12, 0x0d, 0x61, + 0x9f, 0xe3, 0x0d, 0xa4, 0x61, 0x10, 0x28, 0xb4, 0x8a, 0x78, 0x0e, 0xed, 0x5c, 0x2e, 0x22, 0x46, + 0x9c, 0x9d, 0xa1, 0x75, 0xd2, 0x0d, 0x5b, 0xb9, 0x5c, 0xf8, 0xc4, 0xfd, 0xd3, 0x80, 0x9e, 0x1f, + 0x5c, 0xc6, 0x38, 0xbd, 0xa0, 0x6c, 0x79, 0x7b, 0x23, 0x24, 0x9a, 0x40, 0x33, 0x11, 0xa4, 0x6c, + 0xa6, 0x77, 0xea, 0x3e, 0x1a, 0x67, 0x1b, 0xf6, 0xbe, 0x09, 0x42, 0x43, 0xc3, 0xa3, 0x63, 0xe8, + 0xaa, 0x18, 0xa7, 0x91, 0xd9, 0x4d, 0x8e, 0xb9, 0x69, 0xa2, 0x1b, 0xee, 0x17, 0xa2, 0x5f, 0x69, + 0xc5, 0x30, 0x09, 0x5e, 0x47, 0x99, 0x14, 0x71, 0xa4, 0x59, 0x42, 0xab, 0x6e, 0xf6, 0x12, 0xbc, + 0x0e, 0xa4, 0x88, 0xaf, 0x58, 0x42, 0xd1, 0x11, 0x40, 0xc1, 0xac, 0x32, 0x82, 0x35, 0x75, 0x9a, + 0x06, 0xb0, 0x13, 0xbc, 0xfe, 0x61, 0x04, 0xf4, 0x06, 0x7a, 0xf5, 0x3d, 0x11, 0xa1, 0x1c, 0xdf, + 0x39, 0xad, 0xad, 0x8b, 0xe6, 0x85, 0x86, 0xde, 0xc2, 0x81, 0xd2, 0x98, 0xd3, 0x48, 0xdf, 0x4a, + 0xaa, 0x6e, 0x05, 0x27, 0x4e, 0xdb, 0x60, 0x3d, 0x23, 0x5f, 0xd5, 0xaa, 0x7b, 0x0a, 0xcd, 0x62, + 0x08, 0xb4, 0x0f, 0x9d, 0xb9, 0x7f, 0x39, 0x9d, 0x7d, 0xfd, 0x32, 0xef, 0x3f, 0x41, 0x1d, 0x68, + 0xfa, 0xc1, 0xf5, 0x59, 0xdf, 0xaa, 0xa2, 0x49, 0xbf, 0x51, 0x44, 0xb3, 0xef, 0x57, 0xe7, 0xfd, + 0x1d, 0xf7, 0xaf, 0x05, 0xf6, 0xfc, 0xfc, 0x73, 0x60, 0xbc, 0x45, 0xef, 0xe0, 0xa9, 0x12, 0x2b, + 0x19, 0xd3, 0x7a, 0xfd, 0x54, 0xa9, 0xca, 0xa4, 0x83, 0x32, 0x51, 0x7a, 0x40, 0x95, 0x42, 0x03, + 0xb0, 0xe5, 0x3a, 0xaa, 0x9c, 0x28, 0x17, 0xb4, 0x2b, 0xd7, 0xd7, 0x85, 0x17, 0xe8, 0x13, 0xec, + 0x2a, 0x2a, 0x73, 0x2a, 0x95, 0xd3, 0x34, 0x4f, 0xe9, 0xf8, 0xd1, 0xee, 0xef, 0xaf, 0x34, 0xd1, + 0xa5, 0x61, 0xc3, 0xba, 0x66, 0x30, 0x03, 0x78, 0x90, 0x37, 0xfc, 0xb6, 0x36, 0xfc, 0x2e, 0x76, + 0xbb, 0xd1, 0x64, 0xf9, 0x4c, 0x6c, 0x56, 0xb7, 0xe7, 0xfe, 0x82, 0x96, 0x1f, 0x4c, 0x2e, 0xe6, + 0xe8, 0x05, 0xd8, 0xf7, 0x6f, 0xbc, 0x9a, 0xe5, 0x41, 0x40, 0x2f, 0x01, 0xf0, 0x4a, 0x8b, 0x58, + 0xa4, 0x0b, 0xb6, 0x34, 0xa7, 0x74, 0xc2, 0x0d, 0x05, 0x9d, 0xc1, 0x21, 0x4b, 0x8b, 0x3d, 0xf3, + 0x88, 0xd0, 0x05, 0x5e, 0x71, 0x1d, 0x49, 0xb1, 0xd2, 0x54, 0x19, 0xbb, 0x3b, 0xe1, 0xb3, 0x2a, + 0x3b, 0x2f, 0x93, 0xa1, 0xc9, 0xcd, 0x26, 0x3f, 0xcf, 0x96, 0xa2, 0x1e, 0x99, 0x99, 0x8f, 0xfc, + 0x1e, 0x2f, 0x69, 0xaa, 0x47, 0xf9, 0x78, 0x64, 0xfe, 0xf2, 0x68, 0xeb, 0x8b, 0x7f, 0xcc, 0xb3, + 0x2c, 0xe2, 0xe3, 0x9b, 0xb6, 0xc9, 0x8d, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xa6, 0x7f, 0x2d, + 0x36, 0x01, 0x04, 0x00, 0x00, } diff --git a/proto/ligato/vpp/l3/l3.proto b/proto/ligato/vpp/l3/l3.proto index a212272399..f90e6ba7fd 100644 --- a/proto/ligato/vpp/l3/l3.proto +++ b/proto/ligato/vpp/l3/l3.proto @@ -4,10 +4,12 @@ package ligato.vpp.l3; option go_package = "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3;vpp_l3"; +// ARP Proxy message ProxyARP { message Interface { string name = 1; } + // List of interfaces proxy ARP is enabled for. repeated Interface interfaces = 1; message Range { @@ -18,6 +20,7 @@ message ProxyARP { repeated Range ranges = 2; } +// IP Neighbour Config message IPScanNeighbor { enum Mode { DISABLED = 0; @@ -34,6 +37,7 @@ message IPScanNeighbor { uint32 stale_threshold = 6; } +// DHCP Proxy message DHCPProxy { message DHCPServer { @@ -45,3 +49,13 @@ message DHCPProxy { uint32 rx_vrf_id = 2; repeated DHCPServer servers = 4; } + +// IPv6 Neighbor Discovery +message IP6ND { + // Name of interface this config applies to. + string interface = 1; + // Enable IPv6 ND address autoconfiguration. + bool autoconfig = 2; + // Enable installing default routes. + bool install_default_routes = 3; +} \ No newline at end of file diff --git a/proto/ligato/vpp/l3/models.go b/proto/ligato/vpp/l3/models.go index 231f1883e6..470a26298b 100644 --- a/proto/ligato/vpp/l3/models.go +++ b/proto/ligato/vpp/l3/models.go @@ -88,6 +88,14 @@ var ( }, models.WithNameTemplate( `{{.Interface}}/peer/{{.PeerAddr}}`, )) + + ModelIP6ND = models.Register(&IP6ND{}, models.Spec{ + Module: ModuleName, + Type: "ip6nd", + Version: "v2", + }, models.WithNameTemplate( + `{{.Interface}}`, + )) ) // ProxyARPKey returns key for global proxy arp @@ -141,6 +149,13 @@ func L3XCKey(iface string, protocol L3XConnect_Protocol) string { }) } +// IP6NDKey returns key for IP6ND +func IP6NDKey(iface string) string { + return models.Key(&IP6ND{ + Interface: iface, + }) +} + const ( proxyARPInterfacePrefix = "vpp/proxyarp/interface/" proxyARPInterfaceTemplate = proxyARPInterfacePrefix + "{iface}" diff --git a/proto/ligato/vpp/vpp.pb.go b/proto/ligato/vpp/vpp.pb.go index 848ba95c93..9733b50955 100644 --- a/proto/ligato/vpp/vpp.pb.go +++ b/proto/ligato/vpp/vpp.pb.go @@ -9,7 +9,6 @@ import ( abf "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/abf" acl "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/acl" interfaces "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" - ipfix "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/ipfix" ipsec "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/ipsec" l2 "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l2" l3 "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" @@ -30,43 +29,38 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// ConfigData holds the entire VPP configuration. type ConfigData struct { - Interfaces []*interfaces.Interface `protobuf:"bytes,10,rep,name=interfaces,proto3" json:"interfaces,omitempty"` - Spans []*interfaces.Span `protobuf:"bytes,11,rep,name=spans,proto3" json:"spans,omitempty"` - Acls []*acl.ACL `protobuf:"bytes,20,rep,name=acls,proto3" json:"acls,omitempty"` - Abfs []*abf.ABF `protobuf:"bytes,21,rep,name=abfs,proto3" json:"abfs,omitempty"` - BridgeDomains []*l2.BridgeDomain `protobuf:"bytes,30,rep,name=bridge_domains,json=bridgeDomains,proto3" json:"bridge_domains,omitempty"` - Fibs []*l2.FIBEntry `protobuf:"bytes,31,rep,name=fibs,proto3" json:"fibs,omitempty"` - XconnectPairs []*l2.XConnectPair `protobuf:"bytes,32,rep,name=xconnect_pairs,json=xconnectPairs,proto3" json:"xconnect_pairs,omitempty"` - Routes []*l3.Route `protobuf:"bytes,40,rep,name=routes,proto3" json:"routes,omitempty"` - Arps []*l3.ARPEntry `protobuf:"bytes,41,rep,name=arps,proto3" json:"arps,omitempty"` - ProxyArp *l3.ProxyARP `protobuf:"bytes,42,opt,name=proxy_arp,json=proxyArp,proto3" json:"proxy_arp,omitempty"` - IpscanNeighbor *l3.IPScanNeighbor `protobuf:"bytes,43,opt,name=ipscan_neighbor,json=ipscanNeighbor,proto3" json:"ipscan_neighbor,omitempty"` - Vrfs []*l3.VrfTable `protobuf:"bytes,44,rep,name=vrfs,proto3" json:"vrfs,omitempty"` - L3Xconnects []*l3.L3XConnect `protobuf:"bytes,45,rep,name=l3xconnects,proto3" json:"l3xconnects,omitempty"` - DhcpProxies []*l3.DHCPProxy `protobuf:"bytes,46,rep,name=dhcp_proxies,json=dhcpProxies,proto3" json:"dhcp_proxies,omitempty"` - TeibEntries []*l3.TeibEntry `protobuf:"bytes,47,rep,name=teib_entries,json=teibEntries,proto3" json:"teib_entries,omitempty"` - Nat44Global *nat.Nat44Global `protobuf:"bytes,50,opt,name=nat44_global,json=nat44Global,proto3" json:"nat44_global,omitempty"` - Dnat44S []*nat.DNat44 `protobuf:"bytes,51,rep,name=dnat44s,proto3" json:"dnat44s,omitempty"` - Nat44Interfaces []*nat.Nat44Interface `protobuf:"bytes,52,rep,name=nat44_interfaces,json=nat44Interfaces,proto3" json:"nat44_interfaces,omitempty"` - Nat44Pools []*nat.Nat44AddressPool `protobuf:"bytes,53,rep,name=nat44_pools,json=nat44Pools,proto3" json:"nat44_pools,omitempty"` - IpsecSpds []*ipsec.SecurityPolicyDatabase `protobuf:"bytes,60,rep,name=ipsec_spds,json=ipsecSpds,proto3" json:"ipsec_spds,omitempty"` - IpsecSas []*ipsec.SecurityAssociation `protobuf:"bytes,61,rep,name=ipsec_sas,json=ipsecSas,proto3" json:"ipsec_sas,omitempty"` - IpsecTunnelProtections []*ipsec.TunnelProtection `protobuf:"bytes,62,rep,name=ipsec_tunnel_protections,json=ipsecTunnelProtections,proto3" json:"ipsec_tunnel_protections,omitempty"` - PuntIpredirects []*punt.IPRedirect `protobuf:"bytes,70,rep,name=punt_ipredirects,json=puntIpredirects,proto3" json:"punt_ipredirects,omitempty"` - PuntTohosts []*punt.ToHost `protobuf:"bytes,71,rep,name=punt_tohosts,json=puntTohosts,proto3" json:"punt_tohosts,omitempty"` - PuntExceptions []*punt.Exception `protobuf:"bytes,72,rep,name=punt_exceptions,json=puntExceptions,proto3" json:"punt_exceptions,omitempty"` - Srv6Global *srv6.SRv6Global `protobuf:"bytes,83,opt,name=srv6_global,json=srv6Global,proto3" json:"srv6_global,omitempty"` - Srv6Localsids []*srv6.LocalSID `protobuf:"bytes,80,rep,name=srv6_localsids,json=srv6Localsids,proto3" json:"srv6_localsids,omitempty"` - Srv6Policies []*srv6.Policy `protobuf:"bytes,81,rep,name=srv6_policies,json=srv6Policies,proto3" json:"srv6_policies,omitempty"` - Srv6Steerings []*srv6.Steering `protobuf:"bytes,82,rep,name=srv6_steerings,json=srv6Steerings,proto3" json:"srv6_steerings,omitempty"` - IpfixGlobal *ipfix.IPFIX `protobuf:"bytes,90,opt,name=ipfix_global,json=ipfixGlobal,proto3" json:"ipfix_global,omitempty"` - IpfixFlowprobeParams *ipfix.FlowProbeParams `protobuf:"bytes,91,opt,name=ipfix_flowprobe_params,json=ipfixFlowprobeParams,proto3" json:"ipfix_flowprobe_params,omitempty"` - IpfixFlowprobes []*ipfix.FlowProbeFeature `protobuf:"bytes,92,rep,name=ipfix_flowprobes,json=ipfixFlowprobes,proto3" json:"ipfix_flowprobes,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Interfaces []*interfaces.Interface `protobuf:"bytes,10,rep,name=interfaces,proto3" json:"interfaces,omitempty"` + Spans []*interfaces.Span `protobuf:"bytes,11,rep,name=spans,proto3" json:"spans,omitempty"` + Acls []*acl.ACL `protobuf:"bytes,20,rep,name=acls,proto3" json:"acls,omitempty"` + Abfs []*abf.ABF `protobuf:"bytes,21,rep,name=abfs,proto3" json:"abfs,omitempty"` + BridgeDomains []*l2.BridgeDomain `protobuf:"bytes,30,rep,name=bridge_domains,json=bridgeDomains,proto3" json:"bridge_domains,omitempty"` + Fibs []*l2.FIBEntry `protobuf:"bytes,31,rep,name=fibs,proto3" json:"fibs,omitempty"` + XconnectPairs []*l2.XConnectPair `protobuf:"bytes,32,rep,name=xconnect_pairs,json=xconnectPairs,proto3" json:"xconnect_pairs,omitempty"` + Routes []*l3.Route `protobuf:"bytes,40,rep,name=routes,proto3" json:"routes,omitempty"` + Arps []*l3.ARPEntry `protobuf:"bytes,41,rep,name=arps,proto3" json:"arps,omitempty"` + ProxyArp *l3.ProxyARP `protobuf:"bytes,42,opt,name=proxy_arp,json=proxyArp,proto3" json:"proxy_arp,omitempty"` + IpscanNeighbor *l3.IPScanNeighbor `protobuf:"bytes,43,opt,name=ipscan_neighbor,json=ipscanNeighbor,proto3" json:"ipscan_neighbor,omitempty"` + Vrfs []*l3.VrfTable `protobuf:"bytes,44,rep,name=vrfs,proto3" json:"vrfs,omitempty"` + L3Xconnects []*l3.L3XConnect `protobuf:"bytes,45,rep,name=l3xconnects,proto3" json:"l3xconnects,omitempty"` + DhcpProxies []*l3.DHCPProxy `protobuf:"bytes,46,rep,name=dhcp_proxies,json=dhcpProxies,proto3" json:"dhcp_proxies,omitempty"` + Ip6Nds []*l3.IP6ND `protobuf:"bytes,47,rep,name=ip6nds,proto3" json:"ip6nds,omitempty"` + Nat44Global *nat.Nat44Global `protobuf:"bytes,50,opt,name=nat44_global,json=nat44Global,proto3" json:"nat44_global,omitempty"` + Dnat44S []*nat.DNat44 `protobuf:"bytes,51,rep,name=dnat44s,proto3" json:"dnat44s,omitempty"` + Nat44Interfaces []*nat.Nat44Interface `protobuf:"bytes,52,rep,name=nat44_interfaces,json=nat44Interfaces,proto3" json:"nat44_interfaces,omitempty"` + Nat44Pools []*nat.Nat44AddressPool `protobuf:"bytes,53,rep,name=nat44_pools,json=nat44Pools,proto3" json:"nat44_pools,omitempty"` + IpsecSpds []*ipsec.SecurityPolicyDatabase `protobuf:"bytes,60,rep,name=ipsec_spds,json=ipsecSpds,proto3" json:"ipsec_spds,omitempty"` + IpsecSas []*ipsec.SecurityAssociation `protobuf:"bytes,61,rep,name=ipsec_sas,json=ipsecSas,proto3" json:"ipsec_sas,omitempty"` + PuntIpredirects []*punt.IPRedirect `protobuf:"bytes,70,rep,name=punt_ipredirects,json=puntIpredirects,proto3" json:"punt_ipredirects,omitempty"` + PuntTohosts []*punt.ToHost `protobuf:"bytes,71,rep,name=punt_tohosts,json=puntTohosts,proto3" json:"punt_tohosts,omitempty"` + PuntExceptions []*punt.Exception `protobuf:"bytes,72,rep,name=punt_exceptions,json=puntExceptions,proto3" json:"punt_exceptions,omitempty"` + Srv6Global *srv6.SRv6Global `protobuf:"bytes,83,opt,name=srv6_global,json=srv6Global,proto3" json:"srv6_global,omitempty"` + Srv6Localsids []*srv6.LocalSID `protobuf:"bytes,80,rep,name=srv6_localsids,json=srv6Localsids,proto3" json:"srv6_localsids,omitempty"` + Srv6Policies []*srv6.Policy `protobuf:"bytes,81,rep,name=srv6_policies,json=srv6Policies,proto3" json:"srv6_policies,omitempty"` + Srv6Steerings []*srv6.Steering `protobuf:"bytes,82,rep,name=srv6_steerings,json=srv6Steerings,proto3" json:"srv6_steerings,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ConfigData) Reset() { *m = ConfigData{} } @@ -192,9 +186,9 @@ func (m *ConfigData) GetDhcpProxies() []*l3.DHCPProxy { return nil } -func (m *ConfigData) GetTeibEntries() []*l3.TeibEntry { +func (m *ConfigData) GetIp6Nds() []*l3.IP6ND { if m != nil { - return m.TeibEntries + return m.Ip6Nds } return nil } @@ -241,13 +235,6 @@ func (m *ConfigData) GetIpsecSas() []*ipsec.SecurityAssociation { return nil } -func (m *ConfigData) GetIpsecTunnelProtections() []*ipsec.TunnelProtection { - if m != nil { - return m.IpsecTunnelProtections - } - return nil -} - func (m *ConfigData) GetPuntIpredirects() []*punt.IPRedirect { if m != nil { return m.PuntIpredirects @@ -297,27 +284,6 @@ func (m *ConfigData) GetSrv6Steerings() []*srv6.Steering { return nil } -func (m *ConfigData) GetIpfixGlobal() *ipfix.IPFIX { - if m != nil { - return m.IpfixGlobal - } - return nil -} - -func (m *ConfigData) GetIpfixFlowprobeParams() *ipfix.FlowProbeParams { - if m != nil { - return m.IpfixFlowprobeParams - } - return nil -} - -func (m *ConfigData) GetIpfixFlowprobes() []*ipfix.FlowProbeFeature { - if m != nil { - return m.IpfixFlowprobes - } - return nil -} - type Notification struct { Interface *interfaces.InterfaceNotification `protobuf:"bytes,1,opt,name=interface,proto3" json:"interface,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -405,75 +371,66 @@ func init() { func init() { proto.RegisterFile("ligato/vpp/vpp.proto", fileDescriptor_0138a1608d5d59f2) } var fileDescriptor_0138a1608d5d59f2 = []byte{ - // 1108 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x56, 0x6d, 0x4f, 0xdc, 0x46, - 0x10, 0x56, 0xd4, 0x24, 0x0d, 0x7b, 0xbc, 0x69, 0x4b, 0xc9, 0x86, 0xb6, 0x29, 0x41, 0x42, 0xa5, - 0x09, 0xb9, 0x6b, 0x39, 0x9a, 0x0f, 0x0d, 0x8d, 0x72, 0x40, 0x0e, 0xae, 0xa2, 0xc8, 0xdd, 0x43, - 0x6d, 0x44, 0x23, 0x59, 0x6b, 0xdf, 0xfa, 0x58, 0xc9, 0xf1, 0xae, 0x76, 0x96, 0x0b, 0xfc, 0xd8, - 0xfe, 0x97, 0x68, 0xc7, 0xf6, 0xbd, 0xd9, 0x28, 0x1f, 0x6c, 0x79, 0x66, 0x9e, 0xe7, 0x99, 0xf1, - 0x7a, 0x66, 0xbd, 0x64, 0x2d, 0x55, 0x43, 0xe1, 0x74, 0x6b, 0x64, 0x8c, 0xbf, 0x9a, 0xc6, 0x6a, - 0xa7, 0x29, 0xc9, 0xbd, 0xcd, 0x91, 0x31, 0x1b, 0x6c, 0x0a, 0x21, 0xa2, 0xc4, 0x5f, 0x39, 0x6a, - 0x36, 0x12, 0xa7, 0xfe, 0x2a, 0x22, 0xdf, 0x4f, 0x45, 0x94, 0x49, 0xd4, 0x4d, 0x7e, 0x2f, 0xa2, - 0x9b, 0x95, 0x68, 0x92, 0xea, 0x4f, 0xc6, 0xea, 0x48, 0x16, 0x88, 0xed, 0x69, 0x44, 0xe6, 0xa4, - 0x4d, 0x44, 0x2c, 0x61, 0xf2, 0x58, 0x27, 0x34, 0x81, 0x81, 0x11, 0x59, 0x81, 0x78, 0x76, 0x07, - 0xc2, 0x09, 0x27, 0x6b, 0x6b, 0x05, 0x19, 0xe7, 0xf7, 0x1a, 0x81, 0x74, 0xaf, 0x15, 0x59, 0x35, - 0x18, 0xca, 0x70, 0xa0, 0x3f, 0x0a, 0x55, 0xe6, 0x78, 0x3c, 0x0b, 0x49, 0x54, 0x54, 0xa3, 0x9c, - 0xee, 0xb5, 0x6e, 0x62, 0x9d, 0x65, 0x32, 0x76, 0x75, 0xb4, 0x76, 0x4b, 0xd8, 0x62, 0xf1, 0x37, - 0xd6, 0x67, 0x03, 0x69, 0xbb, 0x66, 0xb9, 0xd1, 0x7f, 0x53, 0x16, 0xf9, 0x64, 0x36, 0x62, 0xf5, - 0xf5, 0xf8, 0xed, 0xe6, 0x48, 0x4e, 0x8e, 0xab, 0x9b, 0xcb, 0x3f, 0xb2, 0x75, 0x9f, 0x35, 0x13, - 0xce, 0x5f, 0x45, 0x64, 0x63, 0x2a, 0x62, 0xae, 0x33, 0x87, 0xb7, 0x9a, 0x18, 0xd8, 0xd1, 0x2b, - 0xbc, 0xe5, 0xb1, 0xad, 0xff, 0x57, 0x08, 0x39, 0xd2, 0x59, 0xa2, 0x86, 0xc7, 0xc2, 0x09, 0xfa, - 0x96, 0x90, 0xc9, 0xb7, 0x60, 0x64, 0xf3, 0xab, 0x9d, 0xc6, 0xde, 0x66, 0x73, 0xd2, 0x72, 0xcd, - 0x49, 0xb4, 0xd9, 0x2b, 0x1f, 0xf9, 0x14, 0x87, 0xfe, 0x4a, 0x1e, 0xf8, 0x8f, 0x0c, 0xac, 0x81, - 0xe4, 0xef, 0xee, 0x20, 0xf7, 0x8d, 0xc8, 0x78, 0x8e, 0xa4, 0x3f, 0x91, 0xfb, 0x22, 0x4e, 0x81, - 0xad, 0x21, 0xe3, 0x9b, 0x69, 0x86, 0xef, 0xdb, 0xce, 0xd1, 0x19, 0x47, 0x00, 0x02, 0xa3, 0x04, - 0xd8, 0xb7, 0x35, 0xc0, 0x28, 0x69, 0x76, 0x0e, 0xbb, 0x1c, 0x01, 0xf4, 0x90, 0x2c, 0xcf, 0xb4, - 0x03, 0xb0, 0xa7, 0xd5, 0x6a, 0xd2, 0xbd, 0xe6, 0x21, 0x82, 0x8e, 0x11, 0xc3, 0x97, 0xa2, 0x29, - 0x0b, 0xe8, 0x0b, 0x72, 0x3f, 0x51, 0x11, 0xb0, 0x1f, 0x91, 0xf9, 0x78, 0x8e, 0xd9, 0xed, 0x1d, - 0xbe, 0xcb, 0x9c, 0xbd, 0xe5, 0x08, 0xf2, 0x09, 0xcb, 0x1e, 0x0a, 0x8d, 0x50, 0x16, 0xd8, 0x66, - 0x6d, 0xc2, 0xf7, 0x47, 0x39, 0x28, 0x10, 0xca, 0xf2, 0xa5, 0x92, 0xe2, 0x2d, 0xa0, 0xbb, 0xe4, - 0x21, 0xb6, 0x07, 0xb0, 0x1d, 0xe4, 0xae, 0xcd, 0x70, 0xdb, 0x4d, 0xee, 0x83, 0xbc, 0xc0, 0xf8, - 0xf2, 0x84, 0x35, 0xc0, 0x7e, 0xae, 0x29, 0xaf, 0xdd, 0xec, 0xf0, 0xa0, 0x28, 0xcf, 0x83, 0xe8, - 0x3e, 0x59, 0x30, 0x56, 0xdf, 0xdc, 0x86, 0xc2, 0x1a, 0xf6, 0x7c, 0xf3, 0x5e, 0x0d, 0x23, 0xf0, - 0xf1, 0x0e, 0x0f, 0xf8, 0x23, 0x44, 0x76, 0xac, 0xa1, 0x5d, 0xb2, 0xa2, 0x0c, 0xc4, 0x22, 0x0b, - 0x33, 0xa9, 0x86, 0x57, 0x91, 0xb6, 0xec, 0x05, 0x72, 0x7f, 0x98, 0xe3, 0xf6, 0x82, 0x7e, 0x2c, - 0xb2, 0xf3, 0x02, 0xc4, 0x97, 0x73, 0x56, 0x69, 0xfb, 0x52, 0x47, 0x36, 0x01, 0xb6, 0x5b, 0x5b, - 0xea, 0x3f, 0x36, 0xb9, 0x10, 0x51, 0x2a, 0x39, 0x82, 0xe8, 0x6b, 0xd2, 0xf0, 0xe3, 0x93, 0x2f, - 0x0c, 0xb0, 0x97, 0xc8, 0x79, 0x32, 0xc7, 0x39, 0x6b, 0x97, 0x0b, 0xc9, 0xa7, 0xd1, 0xf4, 0x35, - 0x59, 0x1c, 0x5c, 0xc5, 0x26, 0xf4, 0xaf, 0xa0, 0x24, 0xb0, 0x26, 0xb2, 0xd9, 0x1c, 0xfb, 0xf8, - 0xf4, 0x28, 0xc0, 0xd7, 0xe5, 0x0d, 0x8f, 0x0e, 0x72, 0xb0, 0x27, 0xfb, 0x19, 0x0c, 0x65, 0xe6, - 0xac, 0x27, 0xb7, 0x6a, 0xc9, 0x17, 0x52, 0x45, 0xf9, 0xd2, 0x36, 0x5c, 0xf1, 0xe8, 0xc9, 0x6f, - 0xc8, 0x62, 0x26, 0xdc, 0xfe, 0x7e, 0x38, 0x4c, 0x75, 0x24, 0x52, 0xb6, 0x87, 0x0b, 0x35, 0xf3, - 0xf9, 0xfd, 0xb0, 0x9e, 0x7b, 0xcc, 0x09, 0x42, 0x78, 0x23, 0x9b, 0x18, 0xf4, 0x17, 0xf2, 0xf5, - 0x00, 0x6d, 0x60, 0x6d, 0xcc, 0xbb, 0x3e, 0x4f, 0x3d, 0x46, 0x2e, 0x2f, 0x61, 0xb4, 0x47, 0x56, - 0xf3, 0x8c, 0x53, 0x03, 0xbb, 0x8f, 0xd4, 0xa7, 0xb5, 0x59, 0x27, 0xe3, 0xba, 0x92, 0xcd, 0xd8, - 0x40, 0x3b, 0x24, 0xaf, 0x25, 0x34, 0x5a, 0xa7, 0xc0, 0x7e, 0xab, 0x8e, 0xfd, 0x58, 0xa5, 0x33, - 0x18, 0x58, 0x09, 0x10, 0x68, 0x9d, 0x72, 0x82, 0x24, 0xff, 0x08, 0xf4, 0x84, 0x10, 0xdc, 0x9b, - 0x43, 0x30, 0x03, 0x60, 0x07, 0xa8, 0xb0, 0x33, 0x33, 0xfb, 0xb8, 0x73, 0xf7, 0x65, 0x7c, 0x6d, - 0x95, 0xbb, 0x0d, 0x74, 0xaa, 0xe2, 0x5b, 0xbf, 0xe5, 0x44, 0x02, 0x24, 0x5f, 0xc0, 0x68, 0xdf, - 0x0c, 0xfc, 0x24, 0x2d, 0x14, 0x42, 0x02, 0xd8, 0x1f, 0xa8, 0xb3, 0x7d, 0xb7, 0x4e, 0x07, 0x40, - 0xc7, 0x4a, 0x38, 0xa5, 0x33, 0xfe, 0x28, 0x17, 0x11, 0x40, 0x3f, 0x10, 0x96, 0x6b, 0xb8, 0xeb, - 0x2c, 0x93, 0xa9, 0x6f, 0x07, 0x27, 0x63, 0x0f, 0x02, 0xf6, 0x06, 0x25, 0xb7, 0xaa, 0x92, 0x17, - 0x88, 0x0d, 0xc6, 0x50, 0xbe, 0x8e, 0xfe, 0x79, 0x37, 0xd0, 0x2e, 0x59, 0xf5, 0x9b, 0x6b, 0xa8, - 0x8c, 0x95, 0x03, 0x65, 0xb1, 0x4d, 0xbb, 0xd5, 0x69, 0xc7, 0x0d, 0xb8, 0x17, 0xf0, 0x02, 0xc3, - 0x57, 0xbc, 0xa3, 0x37, 0xe1, 0xd0, 0xdf, 0xc9, 0x22, 0xea, 0x38, 0x7d, 0xa5, 0xc1, 0x01, 0x3b, - 0xa9, 0x8e, 0x07, 0x6a, 0x5c, 0xe8, 0x53, 0x0d, 0x8e, 0x37, 0xbc, 0x71, 0x91, 0x63, 0xe9, 0x11, - 0x41, 0xb9, 0x50, 0xde, 0xc4, 0xd2, 0xe4, 0x2f, 0x76, 0x8a, 0xf4, 0x8d, 0x0a, 0xfd, 0x5d, 0x09, - 0xe1, 0xcb, 0xde, 0x1e, 0x9b, 0x40, 0x0f, 0x48, 0xc3, 0xff, 0x09, 0xca, 0x96, 0xed, 0x57, 0x5b, - 0x16, 0x7f, 0x14, 0x7d, 0x3e, 0x7a, 0x55, 0xb4, 0x2c, 0xf1, 0x8e, 0xa2, 0x63, 0xdf, 0x92, 0x65, - 0x64, 0xa7, 0x3a, 0x16, 0x29, 0xa8, 0x01, 0xb0, 0xa0, 0x3a, 0xab, 0x28, 0x70, 0xe6, 0x11, 0xfd, - 0xde, 0x31, 0x5f, 0xf2, 0xe6, 0x59, 0x89, 0xa7, 0x07, 0x04, 0x1d, 0xa1, 0xf1, 0xcd, 0xe0, 0x27, - 0xee, 0xef, 0xea, 0x0a, 0xa0, 0x40, 0xde, 0x2d, 0x7c, 0xd1, 0x1b, 0x41, 0x01, 0x1e, 0xe7, 0x07, - 0x27, 0xa5, 0x55, 0xd9, 0x10, 0x18, 0xbf, 0x23, 0x7f, 0xbf, 0x40, 0xe4, 0xf9, 0x4b, 0x0b, 0x3f, - 0x00, 0x9e, 0x71, 0xca, 0x05, 0xb8, 0xac, 0x6e, 0x8c, 0xf9, 0xd9, 0xa8, 0x17, 0x74, 0x7b, 0xef, - 0x79, 0x03, 0x8d, 0xe2, 0xed, 0xff, 0x25, 0xeb, 0x39, 0x77, 0x7c, 0x3e, 0x0a, 0x8d, 0xb0, 0xe2, - 0x23, 0xb0, 0xff, 0x50, 0xe5, 0x59, 0x55, 0xa5, 0x9b, 0xea, 0x4f, 0x81, 0x47, 0x06, 0x08, 0xe4, - 0x6b, 0xe8, 0xee, 0x96, 0xfc, 0xdc, 0x4b, 0xff, 0x22, 0xab, 0x73, 0xc2, 0xc0, 0x3e, 0xd4, 0xf5, - 0xec, 0x8c, 0x64, 0x57, 0x0a, 0x77, 0x6d, 0x25, 0x5f, 0x99, 0xd5, 0x84, 0xad, 0x4b, 0xb2, 0x78, - 0xae, 0x9d, 0x4a, 0x54, 0x8c, 0x43, 0x42, 0xff, 0x24, 0x0b, 0xe3, 0xfd, 0x82, 0xdd, 0xc3, 0x52, - 0x77, 0xbf, 0xf4, 0x7f, 0x9f, 0x16, 0xe0, 0x13, 0xfa, 0xd6, 0x19, 0x79, 0xd0, 0x77, 0x02, 0xbb, - 0xb1, 0x22, 0xba, 0xfd, 0x25, 0x51, 0x64, 0x4e, 0xa9, 0x1d, 0xee, 0x5e, 0x3e, 0x1f, 0xea, 0x92, - 0xa5, 0xf0, 0xb4, 0xf2, 0x52, 0x0c, 0x65, 0xe6, 0x5a, 0xa3, 0x76, 0x0b, 0x0f, 0x2b, 0xad, 0xc9, - 0x39, 0x26, 0x7a, 0x88, 0x9e, 0xf6, 0xe7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x88, 0x45, 0xb0, 0xca, - 0x25, 0x0b, 0x00, 0x00, + // 970 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0x6d, 0x6f, 0xdb, 0x36, + 0x10, 0x46, 0xb1, 0xb6, 0x6b, 0xe8, 0xbc, 0x14, 0x5c, 0xd6, 0xb2, 0xd9, 0xd6, 0x65, 0x01, 0x82, + 0x65, 0x6d, 0x2a, 0x6f, 0x71, 0x96, 0x0f, 0x6b, 0x36, 0xd4, 0x2f, 0x75, 0xe2, 0xc1, 0x08, 0x34, + 0x3a, 0x18, 0x86, 0x7e, 0x11, 0xa8, 0x37, 0x87, 0x80, 0x26, 0x12, 0x3c, 0xc6, 0x48, 0xfe, 0xc3, + 0x7e, 0xf4, 0xc0, 0x93, 0x64, 0xcb, 0xb6, 0x82, 0x7e, 0x90, 0xa0, 0xe3, 0x3d, 0xcf, 0x73, 0xa7, + 0xe3, 0x1d, 0x49, 0x76, 0x33, 0x39, 0x15, 0x56, 0xb5, 0x67, 0x5a, 0xbb, 0xc7, 0xd3, 0x46, 0x59, + 0x45, 0x49, 0xb1, 0xea, 0xcd, 0xb4, 0xde, 0x63, 0x35, 0x84, 0x08, 0x53, 0xf7, 0x14, 0xa8, 0x65, + 0x4f, 0x94, 0xb9, 0xa7, 0xf4, 0x1c, 0xd6, 0x3c, 0x32, 0xb7, 0x89, 0x49, 0x45, 0x94, 0xc0, 0xe2, + 0xb3, 0x84, 0xed, 0x37, 0xc3, 0x40, 0x8b, 0xbc, 0x44, 0xfc, 0xf0, 0x00, 0xc2, 0x0a, 0x5b, 0x89, + 0x7c, 0x5b, 0x87, 0x68, 0x48, 0xa2, 0xe2, 0xdd, 0x20, 0x90, 0x9d, 0xb4, 0x43, 0x23, 0xe3, 0x69, + 0x12, 0xc4, 0xea, 0x5f, 0x21, 0xab, 0x18, 0x2f, 0x97, 0x21, 0xa9, 0x0c, 0x1b, 0x94, 0xb3, 0x93, + 0xf6, 0x5d, 0xa4, 0xf2, 0x3c, 0x89, 0x6c, 0x13, 0xad, 0xd3, 0x16, 0xa6, 0x2c, 0xde, 0xde, 0x8b, + 0x65, 0x47, 0xd6, 0x69, 0x28, 0x17, 0xae, 0xdf, 0x55, 0x49, 0xbe, 0x5a, 0xf6, 0x18, 0x75, 0x3b, + 0xff, 0xbb, 0x95, 0x28, 0x33, 0xd3, 0x54, 0xfc, 0x5c, 0x58, 0xf7, 0x94, 0x9e, 0xbd, 0x9a, 0x47, + 0xdf, 0xe6, 0x16, 0x5f, 0x0d, 0x3e, 0x30, 0xb3, 0x33, 0x7c, 0x15, 0xbe, 0x83, 0xff, 0xb6, 0x08, + 0xe9, 0xab, 0x3c, 0x95, 0xd3, 0x81, 0xb0, 0x82, 0x7e, 0x20, 0x64, 0x51, 0x71, 0x46, 0xf6, 0xbf, + 0x38, 0x6a, 0x9d, 0xec, 0x7b, 0x8b, 0xc6, 0xf0, 0x16, 0x5e, 0x6f, 0x54, 0x7d, 0xf2, 0x1a, 0x87, + 0xfe, 0x42, 0x9e, 0xb8, 0xad, 0x04, 0xd6, 0x42, 0xf2, 0x37, 0x0f, 0x90, 0x27, 0x5a, 0xe4, 0xbc, + 0x40, 0xd2, 0x1f, 0xc9, 0x63, 0x11, 0x65, 0xc0, 0x76, 0x91, 0xf1, 0x55, 0x9d, 0xe1, 0xba, 0xab, + 0xdb, 0x1f, 0x73, 0x04, 0x20, 0x30, 0x4c, 0x81, 0x7d, 0xdd, 0x00, 0x0c, 0x53, 0xaf, 0xdb, 0x1b, + 0x72, 0x04, 0xd0, 0x1e, 0xd9, 0x5e, 0xda, 0x74, 0x60, 0xaf, 0xd7, 0xb3, 0xc9, 0x4e, 0xbc, 0x1e, + 0x82, 0x06, 0x88, 0xe1, 0x5b, 0x61, 0xcd, 0x02, 0xfa, 0x96, 0x3c, 0x4e, 0x65, 0x08, 0xec, 0x7b, + 0x64, 0xbe, 0x5c, 0x61, 0x0e, 0x47, 0xbd, 0x8f, 0xb9, 0x35, 0xf7, 0x1c, 0x41, 0x2e, 0x60, 0xd5, + 0x29, 0x81, 0x16, 0xd2, 0x00, 0xdb, 0x6f, 0x0c, 0xf8, 0x4f, 0xbf, 0x00, 0xf9, 0x42, 0x1a, 0xbe, + 0x55, 0x51, 0x9c, 0x05, 0xf4, 0x98, 0x3c, 0xc5, 0x26, 0x00, 0x76, 0x84, 0xdc, 0xdd, 0x25, 0x6e, + 0xc7, 0xe3, 0xce, 0xc9, 0x4b, 0x8c, 0x4b, 0x4f, 0x18, 0x0d, 0xec, 0xa7, 0x86, 0xf4, 0x3a, 0x5e, + 0x97, 0xfb, 0x65, 0x7a, 0x0e, 0x44, 0x4f, 0xc9, 0x86, 0x36, 0xea, 0xee, 0x3e, 0x10, 0x46, 0xb3, + 0x37, 0xfb, 0x8f, 0x1a, 0x18, 0xbe, 0xf3, 0x77, 0xb9, 0xcf, 0x9f, 0x21, 0xb2, 0x6b, 0x34, 0x1d, + 0x92, 0x1d, 0xa9, 0x21, 0x12, 0x79, 0x90, 0x27, 0x72, 0x7a, 0x13, 0x2a, 0xc3, 0xde, 0x22, 0xf7, + 0xbb, 0x15, 0xee, 0xc8, 0x9f, 0x44, 0x22, 0xbf, 0x2a, 0x41, 0x7c, 0xbb, 0x60, 0x55, 0xb6, 0x4b, + 0x75, 0x66, 0x52, 0x60, 0xc7, 0x8d, 0xa9, 0xfe, 0x6d, 0xd2, 0x6b, 0x11, 0x66, 0x09, 0x47, 0x10, + 0x7d, 0x4f, 0x5a, 0x6e, 0x48, 0x8a, 0xc2, 0x00, 0x7b, 0x87, 0x9c, 0x57, 0x2b, 0x9c, 0x71, 0xa7, + 0x2a, 0x24, 0xaf, 0xa3, 0xe9, 0x7b, 0xb2, 0x19, 0xdf, 0x44, 0x3a, 0x70, 0xbf, 0x20, 0x13, 0x60, + 0x1e, 0xb2, 0xd9, 0x0a, 0x7b, 0x70, 0xd9, 0xf7, 0xf1, 0x77, 0x79, 0xcb, 0xa1, 0xfd, 0x02, 0xec, + 0xea, 0x2f, 0xf5, 0x59, 0x1e, 0x03, 0x6b, 0x37, 0xd6, 0x7f, 0xe4, 0x9f, 0x5d, 0x0d, 0x78, 0x89, + 0xa1, 0x7f, 0x90, 0xcd, 0x5c, 0xd8, 0xd3, 0xd3, 0x60, 0x9a, 0xa9, 0x50, 0x64, 0xec, 0x04, 0x2b, + 0xb3, 0xb4, 0xdf, 0x6e, 0x3a, 0xaf, 0x1c, 0xe6, 0x02, 0x21, 0xbc, 0x95, 0x2f, 0x0c, 0xfa, 0x33, + 0xf9, 0x32, 0x46, 0x1b, 0x58, 0x07, 0xc3, 0xbd, 0x58, 0xa5, 0x0e, 0x90, 0xcb, 0x2b, 0x18, 0x1d, + 0x91, 0xe7, 0x45, 0xc4, 0xda, 0x84, 0x9e, 0x22, 0xf5, 0x75, 0x63, 0xd4, 0xc5, 0x7c, 0xee, 0xe4, + 0x4b, 0x36, 0xd0, 0x2e, 0x29, 0x72, 0x09, 0xb4, 0x52, 0x19, 0xb0, 0x5f, 0xd7, 0xe7, 0x7c, 0xae, + 0xd2, 0x8d, 0x63, 0x93, 0x00, 0xf8, 0x4a, 0x65, 0x9c, 0x20, 0xc9, 0x7d, 0x02, 0xbd, 0x20, 0x04, + 0x8f, 0xdc, 0x00, 0x74, 0x0c, 0xec, 0x1c, 0x15, 0x8e, 0x96, 0x86, 0x1d, 0x0f, 0xe4, 0x49, 0x12, + 0xdd, 0x1a, 0x69, 0xef, 0x7d, 0x95, 0xc9, 0xe8, 0xde, 0x9d, 0x31, 0xa1, 0x80, 0x84, 0x6f, 0xa0, + 0x77, 0xa2, 0x63, 0x37, 0x3a, 0x1b, 0xa5, 0x90, 0x00, 0xf6, 0x3b, 0xea, 0x1c, 0x3e, 0xac, 0xd3, + 0x05, 0x50, 0x91, 0x14, 0x56, 0xaa, 0x9c, 0x3f, 0x2b, 0x44, 0x04, 0xd0, 0x21, 0x79, 0xee, 0xce, + 0xbb, 0x40, 0x6a, 0x93, 0xc4, 0xd2, 0x60, 0xe7, 0x0c, 0xd7, 0x07, 0x10, 0xcf, 0xc4, 0x91, 0xcf, + 0x4b, 0x0c, 0xdf, 0x71, 0x0b, 0xa3, 0x05, 0x87, 0xfe, 0x46, 0x36, 0x51, 0xc7, 0xaa, 0x1b, 0x05, + 0x16, 0xd8, 0xc5, 0x7a, 0xc7, 0xa2, 0xc6, 0xb5, 0xba, 0x54, 0x60, 0x79, 0xcb, 0x19, 0xd7, 0x05, + 0x96, 0xf6, 0x09, 0xca, 0x05, 0xc9, 0x5d, 0x94, 0x68, 0x97, 0x1f, 0xb0, 0x4b, 0xa4, 0xef, 0xad, + 0xd1, 0x3f, 0x56, 0x10, 0xbe, 0xed, 0xec, 0xb9, 0x09, 0xf4, 0x9c, 0xb4, 0xdc, 0xe1, 0x5c, 0x35, + 0xd5, 0x64, 0xbd, 0xa9, 0xf0, 0xec, 0x9e, 0xf0, 0xd9, 0x59, 0xd9, 0x54, 0xc4, 0x2d, 0x94, 0x3d, + 0xf5, 0x81, 0x6c, 0x23, 0x3b, 0x53, 0x91, 0xc8, 0x40, 0xc6, 0xc0, 0xfc, 0xf5, 0xf1, 0x41, 0x81, + 0xb1, 0x43, 0x4c, 0x46, 0x03, 0xbe, 0xe5, 0xcc, 0x71, 0x85, 0xa7, 0xe7, 0x04, 0x17, 0x02, 0xed, + 0xb6, 0xcb, 0x4d, 0xd0, 0x5f, 0xeb, 0x15, 0x40, 0x81, 0x62, 0x3f, 0xf9, 0xa6, 0x33, 0xfc, 0x12, + 0x3c, 0x8f, 0x0f, 0x36, 0x49, 0x8c, 0xcc, 0xa7, 0xc0, 0xf8, 0x03, 0xf1, 0x27, 0x25, 0xa2, 0x88, + 0x5f, 0x59, 0x70, 0xf0, 0x89, 0x6c, 0x5e, 0x29, 0x2b, 0x53, 0x19, 0xe1, 0x16, 0xd3, 0x3f, 0xc9, + 0xc6, 0xbc, 0xdb, 0xd9, 0x23, 0xac, 0xc6, 0xf1, 0xe7, 0xae, 0xa3, 0xba, 0x00, 0x5f, 0xd0, 0x0f, + 0xc6, 0xe4, 0xc9, 0xc4, 0x0a, 0xdc, 0xa9, 0x35, 0xd1, 0xc3, 0xcf, 0x89, 0x22, 0xb3, 0xa6, 0xd6, + 0x3b, 0xfe, 0xf4, 0x66, 0xaa, 0x2a, 0x96, 0xc4, 0xcb, 0xf5, 0x9d, 0x98, 0x26, 0xb9, 0x6d, 0xcf, + 0x3a, 0x6d, 0xbc, 0x5b, 0xdb, 0x8b, 0x6b, 0x37, 0x7c, 0x8a, 0x2b, 0x9d, 0xff, 0x03, 0x00, 0x00, + 0xff, 0xff, 0xca, 0x63, 0x17, 0x73, 0x7a, 0x09, 0x00, 0x00, } diff --git a/proto/ligato/vpp/vpp.proto b/proto/ligato/vpp/vpp.proto index aeb203fa75..0c94979863 100644 --- a/proto/ligato/vpp/vpp.proto +++ b/proto/ligato/vpp/vpp.proto @@ -45,6 +45,7 @@ message ConfigData { repeated l3.L3XConnect l3xconnects = 45; repeated l3.DHCPProxy dhcp_proxies = 46; repeated l3.TeibEntry teib_entries = 47; + repeated l3.IP6ND ip6nds = 48; nat.Nat44Global nat44_global = 50; repeated nat.DNat44 dnat44s = 51; From 8858b3e178e9513a228c019489996c580240c873 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Mon, 6 Jul 2020 10:44:01 +0200 Subject: [PATCH 04/13] Define vppcalls for IP6ND Signed-off-by: Ondrej Fabry --- plugins/vpp/l3plugin/vppcalls/l3_vppcalls.go | 6 +++ .../vppcalls/vpp1904/ip6nd_vppcalls.go | 24 +++++++++ .../vppcalls/vpp1908/ip6nd_vppcalls.go | 24 +++++++++ .../vppcalls/vpp2001/ip6nd_vppcalls.go | 24 +++++++++ .../vppcalls/vpp2005/ip6nd_vppcalls.go | 53 +++++++++++++++++++ .../vppcalls/vpp2005/vppcalls_handlers.go | 26 +++++++++ 6 files changed, 157 insertions(+) create mode 100644 plugins/vpp/l3plugin/vppcalls/vpp1904/ip6nd_vppcalls.go create mode 100644 plugins/vpp/l3plugin/vppcalls/vpp1908/ip6nd_vppcalls.go create mode 100644 plugins/vpp/l3plugin/vppcalls/vpp2001/ip6nd_vppcalls.go create mode 100644 plugins/vpp/l3plugin/vppcalls/vpp2005/ip6nd_vppcalls.go diff --git a/plugins/vpp/l3plugin/vppcalls/l3_vppcalls.go b/plugins/vpp/l3plugin/vppcalls/l3_vppcalls.go index a02a587bff..947634bb69 100644 --- a/plugins/vpp/l3plugin/vppcalls/l3_vppcalls.go +++ b/plugins/vpp/l3plugin/vppcalls/l3_vppcalls.go @@ -47,6 +47,7 @@ type L3VppAPI interface { DHCPProxyAPI L3XCVppAPI TeibVppAPI + IP6ndVppAPI } // ArpDetails holds info about ARP entry as a proto model @@ -261,6 +262,11 @@ type L3XCVppAPI interface { DeleteL3XC(ctx context.Context, index uint32, ipv6 bool) error } +// IP6ndVppAPI provides methods for managing IPv6 ND configuration. +type IP6ndVppAPI interface { + SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error +} + var Handler = vpp.RegisterHandler(vpp.HandlerDesc{ Name: "l3", HandlerAPI: (*L3VppAPI)(nil), diff --git a/plugins/vpp/l3plugin/vppcalls/vpp1904/ip6nd_vppcalls.go b/plugins/vpp/l3plugin/vppcalls/vpp1904/ip6nd_vppcalls.go new file mode 100644 index 0000000000..70ef855a97 --- /dev/null +++ b/plugins/vpp/l3plugin/vppcalls/vpp1904/ip6nd_vppcalls.go @@ -0,0 +1,24 @@ +// Copyright (c) 2020 Cisco and/or its affiliates. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at: +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package vpp1904 + +import ( + "context" + "fmt" +) + +func (h *L3VppHandler) SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error { + return fmt.Errorf("not supported for this VPP version") +} diff --git a/plugins/vpp/l3plugin/vppcalls/vpp1908/ip6nd_vppcalls.go b/plugins/vpp/l3plugin/vppcalls/vpp1908/ip6nd_vppcalls.go new file mode 100644 index 0000000000..f67b3a5993 --- /dev/null +++ b/plugins/vpp/l3plugin/vppcalls/vpp1908/ip6nd_vppcalls.go @@ -0,0 +1,24 @@ +// Copyright (c) 2020 Cisco and/or its affiliates. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at: +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package vpp1908 + +import ( + "context" + "fmt" +) + +func (h *L3VppHandler) SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error { + return fmt.Errorf("not supported for this VPP version") +} diff --git a/plugins/vpp/l3plugin/vppcalls/vpp2001/ip6nd_vppcalls.go b/plugins/vpp/l3plugin/vppcalls/vpp2001/ip6nd_vppcalls.go new file mode 100644 index 0000000000..428a1cd41c --- /dev/null +++ b/plugins/vpp/l3plugin/vppcalls/vpp2001/ip6nd_vppcalls.go @@ -0,0 +1,24 @@ +// Copyright (c) 2020 Cisco and/or its affiliates. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at: +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package vpp2001 + +import ( + "context" + "fmt" +) + +func (h *L3VppHandler) SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error { + return fmt.Errorf("not supported for this VPP version") +} diff --git a/plugins/vpp/l3plugin/vppcalls/vpp2005/ip6nd_vppcalls.go b/plugins/vpp/l3plugin/vppcalls/vpp2005/ip6nd_vppcalls.go new file mode 100644 index 0000000000..d3344086a7 --- /dev/null +++ b/plugins/vpp/l3plugin/vppcalls/vpp2005/ip6nd_vppcalls.go @@ -0,0 +1,53 @@ +// Copyright (c) 2020 Cisco and/or its affiliates. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at: +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package vpp2005 + +import ( + "context" + "fmt" + + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/interface_types" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/rd_cp" +) + +func (h *IP6ndHandler) SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error { + meta, found := h.ifIndexes.LookupByName(iface) + if !found { + return fmt.Errorf("interface %s not found", iface) + } + + _, err := h.rpcRdCp.IP6NdAddressAutoconfig(ctx, &rd_cp.IP6NdAddressAutoconfig{ + SwIfIndex: interface_types.InterfaceIndex(meta.SwIfIndex), + Enable: enable, + InstallDefaultRoutes: installDefaultRoutes, + }) + if err != nil { + return err + } + return nil +} + +/*func (h *IP6ndHandler) DumpIP6nd(ctx context.Context, iface string) error { + meta, found := h.ifIndexes.LookupByName(iface) + if !found { + return fmt.Errorf("interface %s not found", iface) + } + + _, err := h.rpcIP6nd. + if err != nil { + return err + } + return nil +}*/ diff --git a/plugins/vpp/l3plugin/vppcalls/vpp2005/vppcalls_handlers.go b/plugins/vpp/l3plugin/vppcalls/vpp2005/vppcalls_handlers.go index 4ef39da92d..9edcbf937a 100644 --- a/plugins/vpp/l3plugin/vppcalls/vpp2005/vppcalls_handlers.go +++ b/plugins/vpp/l3plugin/vppcalls/vpp2005/vppcalls_handlers.go @@ -29,9 +29,11 @@ import ( "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005" vpp_dhcp "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/dhcp" vpp_ip "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip6_nd" vpp_ip_neighbor "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip_neighbor" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip_types" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/l3xc" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/rd_cp" vpp_vpe "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/vpe" "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/ifaceidx" "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/vppcalls" @@ -57,6 +59,7 @@ type L3VppHandler struct { *DHCPProxyHandler *L3XCHandler *TeibHandler + *IP6ndHandler } func NewL3VppHandler( @@ -80,6 +83,7 @@ func NewL3VppHandler( DHCPProxyHandler: NewDHCPProxyHandler(ch, log), L3XCHandler: NewL3XCHandler(c, ifIdx, log), TeibHandler: NewTeibVppHandler(ch, ifIdx, log), + IP6ndHandler: NewIP6ndVppHandler(ch, ifIdx, log), } } @@ -132,6 +136,15 @@ type TeibHandler struct { log logging.Logger } +// IP6ndHandler is accessor for IP6ND-related vppcalls methods +type IP6ndHandler struct { + rpcIP6nd ip6_nd.RPCService + rpcRdCp rd_cp.RPCService + callsChannel govppapi.Channel + ifIndexes ifaceidx.IfaceMetadataIndex + log logging.Logger +} + // NewArpVppHandler creates new instance of IPsec vppcalls handler func NewArpVppHandler(callsChan govppapi.Channel, ifIndexes ifaceidx.IfaceMetadataIndex, log logging.Logger) *ArpVppHandler { if log == nil { @@ -217,6 +230,19 @@ func NewTeibVppHandler(callsChan govppapi.Channel, ifIndexes ifaceidx.IfaceMetad } } +func NewIP6ndVppHandler(ch govppapi.Channel, ifIndexes ifaceidx.IfaceMetadataIndex, log logging.Logger) *IP6ndHandler { + if log == nil { + log = logrus.NewLogger("ip6nd-handler") + } + return &IP6ndHandler{ + rpcIP6nd: ip6_nd.NewServiceClient(ch), + rpcRdCp: rd_cp.NewServiceClient(ch), + callsChannel: ch, + ifIndexes: ifIndexes, + log: log, + } +} + type L3XCHandler struct { l3xc l3xc.RPCService ifIndexes ifaceidx.IfaceMetadataIndex From d5752b7c88a3ab1bd94ab6a0406bbc1867d656cb Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Mon, 6 Jul 2020 10:44:33 +0200 Subject: [PATCH 05/13] Add IP6ND descriptor Signed-off-by: Ondrej Fabry --- .../vpp/l3plugin/descriptor/adapter/ip6nd.go | 233 ++++++++++++++++++ plugins/vpp/l3plugin/descriptor/ip6nd.go | 119 +++++++++ plugins/vpp/l3plugin/l3plugin.go | 1 + 3 files changed, 353 insertions(+) create mode 100644 plugins/vpp/l3plugin/descriptor/adapter/ip6nd.go create mode 100644 plugins/vpp/l3plugin/descriptor/ip6nd.go diff --git a/plugins/vpp/l3plugin/descriptor/adapter/ip6nd.go b/plugins/vpp/l3plugin/descriptor/adapter/ip6nd.go new file mode 100644 index 0000000000..9e2b045784 --- /dev/null +++ b/plugins/vpp/l3plugin/descriptor/adapter/ip6nd.go @@ -0,0 +1,233 @@ +// Code generated by adapter-generator. DO NOT EDIT. + +package adapter + +import ( + "github.com/golang/protobuf/proto" + . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" + "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" +) + +////////// type-safe key-value pair with metadata ////////// + +type IP6NDKVWithMetadata struct { + Key string + Value *vpp_l3.IP6ND + Metadata interface{} + Origin ValueOrigin +} + +////////// type-safe Descriptor structure ////////// + +type IP6NDDescriptor struct { + Name string + KeySelector KeySelector + ValueTypeName string + KeyLabel func(key string) string + ValueComparator func(key string, oldValue, newValue *vpp_l3.IP6ND) bool + NBKeyPrefix string + WithMetadata bool + MetadataMapFactory MetadataMapFactory + Validate func(key string, value *vpp_l3.IP6ND) error + Create func(key string, value *vpp_l3.IP6ND) (metadata interface{}, err error) + Delete func(key string, value *vpp_l3.IP6ND, metadata interface{}) error + Update func(key string, oldValue, newValue *vpp_l3.IP6ND, oldMetadata interface{}) (newMetadata interface{}, err error) + UpdateWithRecreate func(key string, oldValue, newValue *vpp_l3.IP6ND, metadata interface{}) bool + Retrieve func(correlate []IP6NDKVWithMetadata) ([]IP6NDKVWithMetadata, error) + IsRetriableFailure func(err error) bool + DerivedValues func(key string, value *vpp_l3.IP6ND) []KeyValuePair + Dependencies func(key string, value *vpp_l3.IP6ND) []Dependency + RetrieveDependencies []string /* descriptor name */ +} + +////////// Descriptor adapter ////////// + +type IP6NDDescriptorAdapter struct { + descriptor *IP6NDDescriptor +} + +func NewIP6NDDescriptor(typedDescriptor *IP6NDDescriptor) *KVDescriptor { + adapter := &IP6NDDescriptorAdapter{descriptor: typedDescriptor} + descriptor := &KVDescriptor{ + Name: typedDescriptor.Name, + KeySelector: typedDescriptor.KeySelector, + ValueTypeName: typedDescriptor.ValueTypeName, + KeyLabel: typedDescriptor.KeyLabel, + NBKeyPrefix: typedDescriptor.NBKeyPrefix, + WithMetadata: typedDescriptor.WithMetadata, + MetadataMapFactory: typedDescriptor.MetadataMapFactory, + IsRetriableFailure: typedDescriptor.IsRetriableFailure, + RetrieveDependencies: typedDescriptor.RetrieveDependencies, + } + if typedDescriptor.ValueComparator != nil { + descriptor.ValueComparator = adapter.ValueComparator + } + if typedDescriptor.Validate != nil { + descriptor.Validate = adapter.Validate + } + if typedDescriptor.Create != nil { + descriptor.Create = adapter.Create + } + if typedDescriptor.Delete != nil { + descriptor.Delete = adapter.Delete + } + if typedDescriptor.Update != nil { + descriptor.Update = adapter.Update + } + if typedDescriptor.UpdateWithRecreate != nil { + descriptor.UpdateWithRecreate = adapter.UpdateWithRecreate + } + if typedDescriptor.Retrieve != nil { + descriptor.Retrieve = adapter.Retrieve + } + if typedDescriptor.Dependencies != nil { + descriptor.Dependencies = adapter.Dependencies + } + if typedDescriptor.DerivedValues != nil { + descriptor.DerivedValues = adapter.DerivedValues + } + return descriptor +} + +func (da *IP6NDDescriptorAdapter) ValueComparator(key string, oldValue, newValue proto.Message) bool { + typedOldValue, err1 := castIP6NDValue(key, oldValue) + typedNewValue, err2 := castIP6NDValue(key, newValue) + if err1 != nil || err2 != nil { + return false + } + return da.descriptor.ValueComparator(key, typedOldValue, typedNewValue) +} + +func (da *IP6NDDescriptorAdapter) Validate(key string, value proto.Message) (err error) { + typedValue, err := castIP6NDValue(key, value) + if err != nil { + return err + } + return da.descriptor.Validate(key, typedValue) +} + +func (da *IP6NDDescriptorAdapter) Create(key string, value proto.Message) (metadata Metadata, err error) { + typedValue, err := castIP6NDValue(key, value) + if err != nil { + return nil, err + } + return da.descriptor.Create(key, typedValue) +} + +func (da *IP6NDDescriptorAdapter) Update(key string, oldValue, newValue proto.Message, oldMetadata Metadata) (newMetadata Metadata, err error) { + oldTypedValue, err := castIP6NDValue(key, oldValue) + if err != nil { + return nil, err + } + newTypedValue, err := castIP6NDValue(key, newValue) + if err != nil { + return nil, err + } + typedOldMetadata, err := castIP6NDMetadata(key, oldMetadata) + if err != nil { + return nil, err + } + return da.descriptor.Update(key, oldTypedValue, newTypedValue, typedOldMetadata) +} + +func (da *IP6NDDescriptorAdapter) Delete(key string, value proto.Message, metadata Metadata) error { + typedValue, err := castIP6NDValue(key, value) + if err != nil { + return err + } + typedMetadata, err := castIP6NDMetadata(key, metadata) + if err != nil { + return err + } + return da.descriptor.Delete(key, typedValue, typedMetadata) +} + +func (da *IP6NDDescriptorAdapter) UpdateWithRecreate(key string, oldValue, newValue proto.Message, metadata Metadata) bool { + oldTypedValue, err := castIP6NDValue(key, oldValue) + if err != nil { + return true + } + newTypedValue, err := castIP6NDValue(key, newValue) + if err != nil { + return true + } + typedMetadata, err := castIP6NDMetadata(key, metadata) + if err != nil { + return true + } + return da.descriptor.UpdateWithRecreate(key, oldTypedValue, newTypedValue, typedMetadata) +} + +func (da *IP6NDDescriptorAdapter) Retrieve(correlate []KVWithMetadata) ([]KVWithMetadata, error) { + var correlateWithType []IP6NDKVWithMetadata + for _, kvpair := range correlate { + typedValue, err := castIP6NDValue(kvpair.Key, kvpair.Value) + if err != nil { + continue + } + typedMetadata, err := castIP6NDMetadata(kvpair.Key, kvpair.Metadata) + if err != nil { + continue + } + correlateWithType = append(correlateWithType, + IP6NDKVWithMetadata{ + Key: kvpair.Key, + Value: typedValue, + Metadata: typedMetadata, + Origin: kvpair.Origin, + }) + } + + typedValues, err := da.descriptor.Retrieve(correlateWithType) + if err != nil { + return nil, err + } + var values []KVWithMetadata + for _, typedKVWithMetadata := range typedValues { + kvWithMetadata := KVWithMetadata{ + Key: typedKVWithMetadata.Key, + Metadata: typedKVWithMetadata.Metadata, + Origin: typedKVWithMetadata.Origin, + } + kvWithMetadata.Value = typedKVWithMetadata.Value + values = append(values, kvWithMetadata) + } + return values, err +} + +func (da *IP6NDDescriptorAdapter) DerivedValues(key string, value proto.Message) []KeyValuePair { + typedValue, err := castIP6NDValue(key, value) + if err != nil { + return nil + } + return da.descriptor.DerivedValues(key, typedValue) +} + +func (da *IP6NDDescriptorAdapter) Dependencies(key string, value proto.Message) []Dependency { + typedValue, err := castIP6NDValue(key, value) + if err != nil { + return nil + } + return da.descriptor.Dependencies(key, typedValue) +} + +////////// Helper methods ////////// + +func castIP6NDValue(key string, value proto.Message) (*vpp_l3.IP6ND, error) { + typedValue, ok := value.(*vpp_l3.IP6ND) + if !ok { + return nil, ErrInvalidValueType(key, value) + } + return typedValue, nil +} + +func castIP6NDMetadata(key string, metadata Metadata) (interface{}, error) { + if metadata == nil { + return nil, nil + } + typedMetadata, ok := metadata.(interface{}) + if !ok { + return nil, ErrInvalidMetadataType(key) + } + return typedMetadata, nil +} diff --git a/plugins/vpp/l3plugin/descriptor/ip6nd.go b/plugins/vpp/l3plugin/descriptor/ip6nd.go new file mode 100644 index 0000000000..b889d6011b --- /dev/null +++ b/plugins/vpp/l3plugin/descriptor/ip6nd.go @@ -0,0 +1,119 @@ +// Copyright (c) 2020 Cisco and/or its affiliates. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at: +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package descriptor + +import ( + "context" + "fmt" + + "go.ligato.io/cn-infra/v2/logging" + + kvs "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" + ifdescriptor "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/descriptor" + "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/descriptor/adapter" + "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/vppcalls" + interfaces "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" + l3 "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" +) + +const ( + // IP6ndDescriptorName is the name of the descriptor. + IP6ndDescriptorName = "vpp-ip6nd" + + // dependency labels + ip6ndEntryInterfaceDep = "interface-exists" +) + +// IP6ndDescriptor instructs KVScheduler how to configure VPP TEIB entries. +type IP6ndDescriptor struct { + log logging.Logger + handler vppcalls.IP6ndVppAPI + scheduler kvs.KVScheduler +} + +// NewIP6ndDescriptor creates a new instance of the IP6ndDescriptor. +func NewIP6ndDescriptor(scheduler kvs.KVScheduler, + handler vppcalls.IP6ndVppAPI, log logging.PluginLogger) *kvs.KVDescriptor { + + ctx := &IP6ndDescriptor{ + scheduler: scheduler, + handler: handler, + log: log.NewLogger("ip6nd-descriptor"), + } + + typedDescr := &adapter.IP6NDDescriptor{ + Name: IP6ndDescriptorName, + NBKeyPrefix: l3.ModelIP6ND.KeyPrefix(), + ValueTypeName: l3.ModelIP6ND.ProtoName(), + KeySelector: l3.ModelIP6ND.IsKeyValid, + KeyLabel: l3.ModelIP6ND.StripKeyPrefix, + Validate: ctx.Validate, + Create: ctx.Create, + Delete: ctx.Delete, + Retrieve: ctx.Retrieve, + Dependencies: ctx.Dependencies, + RetrieveDependencies: []string{ifdescriptor.InterfaceDescriptorName}, + } + return adapter.NewIP6NDDescriptor(typedDescr) +} + +// Validate validates VPP IP6ND entry configuration. +func (d *IP6ndDescriptor) Validate(key string, entry *l3.IP6ND) (err error) { + if entry.Interface == "" { + return kvs.NewInvalidValueError(fmt.Errorf("no interface defined"), "interface") + } + return nil +} + +// Create adds a VPP IP6ND entry. +func (d *IP6ndDescriptor) Create(key string, entry *l3.IP6ND) (interface{}, error) { + return nil, d.handler.SetIP6ndAutoconfig(context.Background(), entry.Interface, entry.Autoconfig, entry.InstallDefaultRoutes) +} + +// Delete removes a VPP IP6ND entry. +func (d *IP6ndDescriptor) Delete(key string, entry *l3.IP6ND, metadata interface{}) error { + return d.handler.SetIP6ndAutoconfig(context.Background(), entry.Interface, false, false) +} + +// Retrieve returns all IP6ND entries. +func (d *IP6ndDescriptor) Retrieve(correlate []adapter.IP6NDKVWithMetadata) ( + retrieved []adapter.IP6NDKVWithMetadata, err error, +) { + // TODO: implement retrieve + /*entries, err := d.handler.DumpIP6ND() + if err != nil { + return nil, err + } + for _, entry := range entries { + retrieved = append(retrieved, adapter.IP6NDKVWithMetadata{ + Key: models.Key(entry), + Value: entry, + Origin: kvs.UnknownOrigin, + }) + }*/ + return +} + +// Dependencies lists dependencies for a VPP IP6ND entry. +func (d *IP6ndDescriptor) Dependencies(key string, entry *l3.IP6ND) (deps []kvs.Dependency) { + + // the referenced interface must exist + deps = append(deps, kvs.Dependency{ + Label: ip6ndEntryInterfaceDep, + Key: interfaces.InterfaceKey(entry.Interface), + }) + + return deps +} diff --git a/plugins/vpp/l3plugin/l3plugin.go b/plugins/vpp/l3plugin/l3plugin.go index 3e42fb65fc..dd4895b105 100644 --- a/plugins/vpp/l3plugin/l3plugin.go +++ b/plugins/vpp/l3plugin/l3plugin.go @@ -21,6 +21,7 @@ //go:generate descriptor-adapter --descriptor-name DHCPProxy --value-type *vpp_l3.DHCPProxy --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" --output-dir "descriptor" //go:generate descriptor-adapter --descriptor-name L3XC --value-type *vpp_l3.L3XConnect --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" --output-dir "descriptor" //go:generate descriptor-adapter --descriptor-name TeibEntry --value-type *vpp_l3.TeibEntry --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" --output-dir "descriptor" +//go:generate descriptor-adapter --descriptor-name IP6ND --value-type *vpp_l3.IP6ND --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" --output-dir "descriptor" package l3plugin From 96b40736dce2c13fdf4752b806b77d1a6d691cc1 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Mon, 6 Jul 2020 10:44:45 +0200 Subject: [PATCH 06/13] Add integration test for IP6ND autoconfig Signed-off-by: Ondrej Fabry --- tests/integration/vpp/032_ip6nd_test.go | 71 +++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tests/integration/vpp/032_ip6nd_test.go diff --git a/tests/integration/vpp/032_ip6nd_test.go b/tests/integration/vpp/032_ip6nd_test.go new file mode 100644 index 0000000000..65803a74fa --- /dev/null +++ b/tests/integration/vpp/032_ip6nd_test.go @@ -0,0 +1,71 @@ +// Copyright (c) 2020 Cisco and/or its affiliates. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at: +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package vpp + +import ( + "testing" + + . "github.com/onsi/gomega" + + "go.ligato.io/cn-infra/v2/logging/logrus" + + netalloc_mock "go.ligato.io/vpp-agent/v3/plugins/netalloc/mock" + "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/ifaceidx" + ifplugin_vppcalls "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/vppcalls" + l3plugin_vppcalls "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/vppcalls" + "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/vrfidx" + vpp_l3 "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" + + _ "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin" +) + +func TestIP6ND(t *testing.T) { + test := setupVPP(t) + defer test.teardownVPP() + + if test.versionInfo.Release() < "20.05" { + t.Skipf("SKIP for VPP %s<20.05", test.versionInfo.Release()) + } + + ih := ifplugin_vppcalls.CompatibleInterfaceVppHandler(test.vppClient, logrus.NewLogger("test")) + const ifName = "loop1" + ifIdx, err := ih.AddLoopbackInterface(ifName) + if err != nil { + t.Fatalf("creating interface failed: %v", err) + } + if err = ih.InterfaceAdminUp(test.Ctx, ifIdx); err != nil { + t.Fatalf("setting interface up failed: %v", err) + } + t.Logf("interface created %v", ifIdx) + + ifIndexes := ifaceidx.NewIfaceIndex(logrus.NewLogger("test-if"), "test-if") + ifIndexes.Put(ifName, &ifaceidx.IfaceMetadata{SwIfIndex: ifIdx}) + vrfIndexes := vrfidx.NewVRFIndex(logrus.NewLogger("test-vrf"), "test-vrf") + vrfIndexes.Put("vrf1-ipv4", &vrfidx.VRFMetadata{Index: 0, Protocol: vpp_l3.VrfTable_IPV4}) + vrfIndexes.Put("vrf1-ipv6", &vrfidx.VRFMetadata{Index: 0, Protocol: vpp_l3.VrfTable_IPV6}) + + h := l3plugin_vppcalls.CompatibleL3VppHandler(test.vppClient, ifIndexes, vrfIndexes, + netalloc_mock.NewMockNetAlloc(), logrus.NewLogger("test")) + + err = h.SetIP6ndAutoconfig(test.Ctx, ifName, true, true) + Expect(err).To(Succeed()) + + out, err := test.vpp.RunCli(test.Ctx, "show ip6 fib") + Expect(err).To(Succeed()) + Expect(out).To(ContainSubstring("default-route:1")) + // TODO: fix test assert + + t.Logf("CLI output: %s", out) +} From a1d1a7bd1ee0ce4445a842271e04754bbc0a3fda Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Mon, 6 Jul 2020 10:45:30 +0200 Subject: [PATCH 07/13] Inherit host env vars for debugging in integration tests Signed-off-by: Ondrej Fabry --- tests/integration/vpp_integration.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/integration/vpp_integration.sh b/tests/integration/vpp_integration.sh index 645bb8a38d..df877b8f5f 100755 --- a/tests/integration/vpp_integration.sh +++ b/tests/integration/vpp_integration.sh @@ -8,6 +8,8 @@ go test -c ./tests/integration/vpp -o ./tests/integration/vpp/vpp-integration.te cid=$(docker run -d -it \ -v $(pwd)/tests/integration/vpp/vpp-integration.test:/vpp-integration.test:ro \ --label vpp.integration.test="$*" \ + -e INITIAL_LOGLVL \ + -e DEBUG_GOVPP \ ${DOCKER_ARGS-} \ "$VPP_IMG" bash) From 52c663e7486008a3dae9c3e8a4e30becf069e1b2 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Mon, 6 Jul 2020 15:04:48 +0200 Subject: [PATCH 08/13] Rebase on master Signed-off-by: Ondrej Fabry --- .../vpp/binapi/vpp2001/ip6_nd/ip6_nd.ba.go | 405 ++++++++++++++++++ plugins/vpp/binapi/vpp2001/rd_cp/rd_cp.ba.go | 119 +++++ proto/ligato/vpp/vpp.pb.go | 238 ++++++---- 3 files changed, 669 insertions(+), 93 deletions(-) create mode 100644 plugins/vpp/binapi/vpp2001/ip6_nd/ip6_nd.ba.go create mode 100644 plugins/vpp/binapi/vpp2001/rd_cp/rd_cp.ba.go diff --git a/plugins/vpp/binapi/vpp2001/ip6_nd/ip6_nd.ba.go b/plugins/vpp/binapi/vpp2001/ip6_nd/ip6_nd.ba.go new file mode 100644 index 0000000000..501ef4e129 --- /dev/null +++ b/plugins/vpp/binapi/vpp2001/ip6_nd/ip6_nd.ba.go @@ -0,0 +1,405 @@ +// Code generated by GoVPP's binapi-generator. DO NOT EDIT. +// source: /usr/share/vpp/api/core/ip6_nd.api.json + +/* +Package ip6_nd is a generated VPP binary API for 'ip6_nd' module. + +It consists of: + 10 enums + 6 aliases + 7 types + 1 union + 13 messages + 6 services +*/ +package ip6_nd + +import ( + "bytes" + "context" + "io" + "strconv" + + api "git.fd.io/govpp.git/api" + struc "github.com/lunixbochs/struc" + + interface_types "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/interface_types" + ip_types "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/ip_types" +) + +const ( + // ModuleName is the name of this module. + ModuleName = "ip6_nd" + // APIVersion is the API version of this module. + APIVersion = "1.0.0" + // VersionCrc is the CRC of this module. + VersionCrc = 0xbb8ff0e9 +) + +type AddressFamily = ip_types.AddressFamily + +type IfStatusFlags = interface_types.IfStatusFlags + +type IfType = interface_types.IfType + +type IPDscp = ip_types.IPDscp + +type IPEcn = ip_types.IPEcn + +type IPProto = ip_types.IPProto + +type LinkDuplex = interface_types.LinkDuplex + +type MtuProto = interface_types.MtuProto + +type RxMode = interface_types.RxMode + +type SubIfFlags = interface_types.SubIfFlags + +type AddressWithPrefix = ip_types.AddressWithPrefix + +type InterfaceIndex = interface_types.InterfaceIndex + +type IP4Address = ip_types.IP4Address + +type IP4AddressWithPrefix = ip_types.IP4AddressWithPrefix + +type IP6Address = ip_types.IP6Address + +type IP6AddressWithPrefix = ip_types.IP6AddressWithPrefix + +type Address = ip_types.Address + +type IP4Prefix = ip_types.IP4Prefix + +type IP6Prefix = ip_types.IP6Prefix + +// IP6RaPrefixInfo represents VPP binary API type 'ip6_ra_prefix_info'. +type IP6RaPrefixInfo struct { + Prefix Prefix + Flags uint8 + ValidTime uint32 + PreferredTime uint32 +} + +func (*IP6RaPrefixInfo) GetTypeName() string { return "ip6_ra_prefix_info" } + +type Mprefix = ip_types.Mprefix + +type Prefix = ip_types.Prefix + +type PrefixMatcher = ip_types.PrefixMatcher + +type AddressUnion = ip_types.AddressUnion + +// IP6RaEvent represents VPP binary API message 'ip6_ra_event'. +type IP6RaEvent struct { + PID uint32 + SwIfIndex InterfaceIndex + RouterAddr IP6Address + CurrentHopLimit uint8 + Flags uint8 + RouterLifetimeInSec uint16 + NeighborReachableTimeInMsec uint32 + TimeInMsecBetweenRetransmittedNeighborSolicitations uint32 + NPrefixes uint32 `struc:"sizeof=Prefixes"` + Prefixes []IP6RaPrefixInfo +} + +func (m *IP6RaEvent) Reset() { *m = IP6RaEvent{} } +func (*IP6RaEvent) GetMessageName() string { return "ip6_ra_event" } +func (*IP6RaEvent) GetCrcString() string { return "47e8cfbe" } +func (*IP6RaEvent) GetMessageType() api.MessageType { return api.EventMessage } + +// IP6ndProxyAddDel represents VPP binary API message 'ip6nd_proxy_add_del'. +type IP6ndProxyAddDel struct { + SwIfIndex InterfaceIndex + IsAdd bool + IP IP6Address +} + +func (m *IP6ndProxyAddDel) Reset() { *m = IP6ndProxyAddDel{} } +func (*IP6ndProxyAddDel) GetMessageName() string { return "ip6nd_proxy_add_del" } +func (*IP6ndProxyAddDel) GetCrcString() string { return "3fdf6659" } +func (*IP6ndProxyAddDel) GetMessageType() api.MessageType { return api.RequestMessage } + +// IP6ndProxyAddDelReply represents VPP binary API message 'ip6nd_proxy_add_del_reply'. +type IP6ndProxyAddDelReply struct { + Retval int32 +} + +func (m *IP6ndProxyAddDelReply) Reset() { *m = IP6ndProxyAddDelReply{} } +func (*IP6ndProxyAddDelReply) GetMessageName() string { return "ip6nd_proxy_add_del_reply" } +func (*IP6ndProxyAddDelReply) GetCrcString() string { return "e8d4e804" } +func (*IP6ndProxyAddDelReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +// IP6ndProxyDetails represents VPP binary API message 'ip6nd_proxy_details'. +type IP6ndProxyDetails struct { + SwIfIndex InterfaceIndex + IP IP6Address +} + +func (m *IP6ndProxyDetails) Reset() { *m = IP6ndProxyDetails{} } +func (*IP6ndProxyDetails) GetMessageName() string { return "ip6nd_proxy_details" } +func (*IP6ndProxyDetails) GetCrcString() string { return "d35be8ff" } +func (*IP6ndProxyDetails) GetMessageType() api.MessageType { return api.ReplyMessage } + +// IP6ndProxyDump represents VPP binary API message 'ip6nd_proxy_dump'. +type IP6ndProxyDump struct{} + +func (m *IP6ndProxyDump) Reset() { *m = IP6ndProxyDump{} } +func (*IP6ndProxyDump) GetMessageName() string { return "ip6nd_proxy_dump" } +func (*IP6ndProxyDump) GetCrcString() string { return "51077d14" } +func (*IP6ndProxyDump) GetMessageType() api.MessageType { return api.RequestMessage } + +// IP6ndSendRouterSolicitation represents VPP binary API message 'ip6nd_send_router_solicitation'. +type IP6ndSendRouterSolicitation struct { + Irt uint32 + Mrt uint32 + Mrc uint32 + Mrd uint32 + SwIfIndex InterfaceIndex + Stop bool +} + +func (m *IP6ndSendRouterSolicitation) Reset() { *m = IP6ndSendRouterSolicitation{} } +func (*IP6ndSendRouterSolicitation) GetMessageName() string { return "ip6nd_send_router_solicitation" } +func (*IP6ndSendRouterSolicitation) GetCrcString() string { return "e5de609c" } +func (*IP6ndSendRouterSolicitation) GetMessageType() api.MessageType { return api.RequestMessage } + +// IP6ndSendRouterSolicitationReply represents VPP binary API message 'ip6nd_send_router_solicitation_reply'. +type IP6ndSendRouterSolicitationReply struct { + Retval int32 +} + +func (m *IP6ndSendRouterSolicitationReply) Reset() { *m = IP6ndSendRouterSolicitationReply{} } +func (*IP6ndSendRouterSolicitationReply) GetMessageName() string { + return "ip6nd_send_router_solicitation_reply" +} +func (*IP6ndSendRouterSolicitationReply) GetCrcString() string { return "e8d4e804" } +func (*IP6ndSendRouterSolicitationReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +// SwInterfaceIP6ndRaConfig represents VPP binary API message 'sw_interface_ip6nd_ra_config'. +type SwInterfaceIP6ndRaConfig struct { + SwIfIndex InterfaceIndex + Suppress uint8 + Managed uint8 + Other uint8 + LlOption uint8 + SendUnicast uint8 + Cease uint8 + IsNo bool + DefaultRouter uint8 + MaxInterval uint32 + MinInterval uint32 + Lifetime uint32 + InitialCount uint32 + InitialInterval uint32 +} + +func (m *SwInterfaceIP6ndRaConfig) Reset() { *m = SwInterfaceIP6ndRaConfig{} } +func (*SwInterfaceIP6ndRaConfig) GetMessageName() string { return "sw_interface_ip6nd_ra_config" } +func (*SwInterfaceIP6ndRaConfig) GetCrcString() string { return "3eb00b1c" } +func (*SwInterfaceIP6ndRaConfig) GetMessageType() api.MessageType { return api.RequestMessage } + +// SwInterfaceIP6ndRaConfigReply represents VPP binary API message 'sw_interface_ip6nd_ra_config_reply'. +type SwInterfaceIP6ndRaConfigReply struct { + Retval int32 +} + +func (m *SwInterfaceIP6ndRaConfigReply) Reset() { *m = SwInterfaceIP6ndRaConfigReply{} } +func (*SwInterfaceIP6ndRaConfigReply) GetMessageName() string { + return "sw_interface_ip6nd_ra_config_reply" +} +func (*SwInterfaceIP6ndRaConfigReply) GetCrcString() string { return "e8d4e804" } +func (*SwInterfaceIP6ndRaConfigReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +// SwInterfaceIP6ndRaPrefix represents VPP binary API message 'sw_interface_ip6nd_ra_prefix'. +type SwInterfaceIP6ndRaPrefix struct { + SwIfIndex InterfaceIndex + Prefix Prefix + UseDefault bool + NoAdvertise bool + OffLink bool + NoAutoconfig bool + NoOnlink bool + IsNo bool + ValLifetime uint32 + PrefLifetime uint32 +} + +func (m *SwInterfaceIP6ndRaPrefix) Reset() { *m = SwInterfaceIP6ndRaPrefix{} } +func (*SwInterfaceIP6ndRaPrefix) GetMessageName() string { return "sw_interface_ip6nd_ra_prefix" } +func (*SwInterfaceIP6ndRaPrefix) GetCrcString() string { return "e098785f" } +func (*SwInterfaceIP6ndRaPrefix) GetMessageType() api.MessageType { return api.RequestMessage } + +// SwInterfaceIP6ndRaPrefixReply represents VPP binary API message 'sw_interface_ip6nd_ra_prefix_reply'. +type SwInterfaceIP6ndRaPrefixReply struct { + Retval int32 +} + +func (m *SwInterfaceIP6ndRaPrefixReply) Reset() { *m = SwInterfaceIP6ndRaPrefixReply{} } +func (*SwInterfaceIP6ndRaPrefixReply) GetMessageName() string { + return "sw_interface_ip6nd_ra_prefix_reply" +} +func (*SwInterfaceIP6ndRaPrefixReply) GetCrcString() string { return "e8d4e804" } +func (*SwInterfaceIP6ndRaPrefixReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +// WantIP6RaEvents represents VPP binary API message 'want_ip6_ra_events'. +type WantIP6RaEvents struct { + Enable bool + PID uint32 +} + +func (m *WantIP6RaEvents) Reset() { *m = WantIP6RaEvents{} } +func (*WantIP6RaEvents) GetMessageName() string { return "want_ip6_ra_events" } +func (*WantIP6RaEvents) GetCrcString() string { return "3ec6d6c2" } +func (*WantIP6RaEvents) GetMessageType() api.MessageType { return api.RequestMessage } + +// WantIP6RaEventsReply represents VPP binary API message 'want_ip6_ra_events_reply'. +type WantIP6RaEventsReply struct { + Retval int32 +} + +func (m *WantIP6RaEventsReply) Reset() { *m = WantIP6RaEventsReply{} } +func (*WantIP6RaEventsReply) GetMessageName() string { return "want_ip6_ra_events_reply" } +func (*WantIP6RaEventsReply) GetCrcString() string { return "e8d4e804" } +func (*WantIP6RaEventsReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +func init() { + api.RegisterMessage((*IP6RaEvent)(nil), "ip6_nd.IP6RaEvent") + api.RegisterMessage((*IP6ndProxyAddDel)(nil), "ip6_nd.IP6ndProxyAddDel") + api.RegisterMessage((*IP6ndProxyAddDelReply)(nil), "ip6_nd.IP6ndProxyAddDelReply") + api.RegisterMessage((*IP6ndProxyDetails)(nil), "ip6_nd.IP6ndProxyDetails") + api.RegisterMessage((*IP6ndProxyDump)(nil), "ip6_nd.IP6ndProxyDump") + api.RegisterMessage((*IP6ndSendRouterSolicitation)(nil), "ip6_nd.IP6ndSendRouterSolicitation") + api.RegisterMessage((*IP6ndSendRouterSolicitationReply)(nil), "ip6_nd.IP6ndSendRouterSolicitationReply") + api.RegisterMessage((*SwInterfaceIP6ndRaConfig)(nil), "ip6_nd.SwInterfaceIP6ndRaConfig") + api.RegisterMessage((*SwInterfaceIP6ndRaConfigReply)(nil), "ip6_nd.SwInterfaceIP6ndRaConfigReply") + api.RegisterMessage((*SwInterfaceIP6ndRaPrefix)(nil), "ip6_nd.SwInterfaceIP6ndRaPrefix") + api.RegisterMessage((*SwInterfaceIP6ndRaPrefixReply)(nil), "ip6_nd.SwInterfaceIP6ndRaPrefixReply") + api.RegisterMessage((*WantIP6RaEvents)(nil), "ip6_nd.WantIP6RaEvents") + api.RegisterMessage((*WantIP6RaEventsReply)(nil), "ip6_nd.WantIP6RaEventsReply") +} + +// Messages returns list of all messages in this module. +func AllMessages() []api.Message { + return []api.Message{ + (*IP6RaEvent)(nil), + (*IP6ndProxyAddDel)(nil), + (*IP6ndProxyAddDelReply)(nil), + (*IP6ndProxyDetails)(nil), + (*IP6ndProxyDump)(nil), + (*IP6ndSendRouterSolicitation)(nil), + (*IP6ndSendRouterSolicitationReply)(nil), + (*SwInterfaceIP6ndRaConfig)(nil), + (*SwInterfaceIP6ndRaConfigReply)(nil), + (*SwInterfaceIP6ndRaPrefix)(nil), + (*SwInterfaceIP6ndRaPrefixReply)(nil), + (*WantIP6RaEvents)(nil), + (*WantIP6RaEventsReply)(nil), + } +} + +// RPCService represents RPC service API for ip6_nd module. +type RPCService interface { + DumpIP6ndProxy(ctx context.Context, in *IP6ndProxyDump) (RPCService_DumpIP6ndProxyClient, error) + IP6ndProxyAddDel(ctx context.Context, in *IP6ndProxyAddDel) (*IP6ndProxyAddDelReply, error) + IP6ndSendRouterSolicitation(ctx context.Context, in *IP6ndSendRouterSolicitation) (*IP6ndSendRouterSolicitationReply, error) + SwInterfaceIP6ndRaConfig(ctx context.Context, in *SwInterfaceIP6ndRaConfig) (*SwInterfaceIP6ndRaConfigReply, error) + SwInterfaceIP6ndRaPrefix(ctx context.Context, in *SwInterfaceIP6ndRaPrefix) (*SwInterfaceIP6ndRaPrefixReply, error) + WantIP6RaEvents(ctx context.Context, in *WantIP6RaEvents) (*WantIP6RaEventsReply, error) +} + +type serviceClient struct { + ch api.Channel +} + +func NewServiceClient(ch api.Channel) RPCService { + return &serviceClient{ch} +} + +func (c *serviceClient) DumpIP6ndProxy(ctx context.Context, in *IP6ndProxyDump) (RPCService_DumpIP6ndProxyClient, error) { + stream := c.ch.SendMultiRequest(in) + x := &serviceClient_DumpIP6ndProxyClient{stream} + return x, nil +} + +type RPCService_DumpIP6ndProxyClient interface { + Recv() (*IP6ndProxyDetails, error) +} + +type serviceClient_DumpIP6ndProxyClient struct { + api.MultiRequestCtx +} + +func (c *serviceClient_DumpIP6ndProxyClient) Recv() (*IP6ndProxyDetails, error) { + m := new(IP6ndProxyDetails) + stop, err := c.MultiRequestCtx.ReceiveReply(m) + if err != nil { + return nil, err + } + if stop { + return nil, io.EOF + } + return m, nil +} + +func (c *serviceClient) IP6ndProxyAddDel(ctx context.Context, in *IP6ndProxyAddDel) (*IP6ndProxyAddDelReply, error) { + out := new(IP6ndProxyAddDelReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) IP6ndSendRouterSolicitation(ctx context.Context, in *IP6ndSendRouterSolicitation) (*IP6ndSendRouterSolicitationReply, error) { + out := new(IP6ndSendRouterSolicitationReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) SwInterfaceIP6ndRaConfig(ctx context.Context, in *SwInterfaceIP6ndRaConfig) (*SwInterfaceIP6ndRaConfigReply, error) { + out := new(SwInterfaceIP6ndRaConfigReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) SwInterfaceIP6ndRaPrefix(ctx context.Context, in *SwInterfaceIP6ndRaPrefix) (*SwInterfaceIP6ndRaPrefixReply, error) { + out := new(SwInterfaceIP6ndRaPrefixReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) WantIP6RaEvents(ctx context.Context, in *WantIP6RaEvents) (*WantIP6RaEventsReply, error) { + out := new(WantIP6RaEventsReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the GoVPP api package it is being compiled against. +// A compilation error at this line likely means your copy of the +// GoVPP api package needs to be updated. +const _ = api.GoVppAPIPackageIsVersion1 // please upgrade the GoVPP api package + +// Reference imports to suppress errors if they are not otherwise used. +var _ = api.RegisterMessage +var _ = bytes.NewBuffer +var _ = context.Background +var _ = io.Copy +var _ = strconv.Itoa +var _ = struc.Pack diff --git a/plugins/vpp/binapi/vpp2001/rd_cp/rd_cp.ba.go b/plugins/vpp/binapi/vpp2001/rd_cp/rd_cp.ba.go new file mode 100644 index 0000000000..e5be342ba1 --- /dev/null +++ b/plugins/vpp/binapi/vpp2001/rd_cp/rd_cp.ba.go @@ -0,0 +1,119 @@ +// Code generated by GoVPP's binapi-generator. DO NOT EDIT. +// source: /usr/share/vpp/api/core/rd_cp.api.json + +/* +Package rd_cp is a generated VPP binary API for 'rd_cp' module. + +It consists of: + 6 enums + 1 alias + 2 messages + 1 service +*/ +package rd_cp + +import ( + "bytes" + "context" + "io" + "strconv" + + api "git.fd.io/govpp.git/api" + struc "github.com/lunixbochs/struc" + + interface_types "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/interface_types" +) + +const ( + // ModuleName is the name of this module. + ModuleName = "rd_cp" + // APIVersion is the API version of this module. + APIVersion = "1.0.1" + // VersionCrc is the CRC of this module. + VersionCrc = 0x5269dfb9 +) + +type IfStatusFlags = interface_types.IfStatusFlags + +type IfType = interface_types.IfType + +type LinkDuplex = interface_types.LinkDuplex + +type MtuProto = interface_types.MtuProto + +type RxMode = interface_types.RxMode + +type SubIfFlags = interface_types.SubIfFlags + +type InterfaceIndex = interface_types.InterfaceIndex + +// IP6NdAddressAutoconfig represents VPP binary API message 'ip6_nd_address_autoconfig'. +type IP6NdAddressAutoconfig struct { + SwIfIndex InterfaceIndex + Enable bool + InstallDefaultRoutes bool +} + +func (m *IP6NdAddressAutoconfig) Reset() { *m = IP6NdAddressAutoconfig{} } +func (*IP6NdAddressAutoconfig) GetMessageName() string { return "ip6_nd_address_autoconfig" } +func (*IP6NdAddressAutoconfig) GetCrcString() string { return "9e14a4a7" } +func (*IP6NdAddressAutoconfig) GetMessageType() api.MessageType { return api.RequestMessage } + +// IP6NdAddressAutoconfigReply represents VPP binary API message 'ip6_nd_address_autoconfig_reply'. +type IP6NdAddressAutoconfigReply struct { + Retval int32 +} + +func (m *IP6NdAddressAutoconfigReply) Reset() { *m = IP6NdAddressAutoconfigReply{} } +func (*IP6NdAddressAutoconfigReply) GetMessageName() string { return "ip6_nd_address_autoconfig_reply" } +func (*IP6NdAddressAutoconfigReply) GetCrcString() string { return "e8d4e804" } +func (*IP6NdAddressAutoconfigReply) GetMessageType() api.MessageType { return api.ReplyMessage } + +func init() { + api.RegisterMessage((*IP6NdAddressAutoconfig)(nil), "rd_cp.IP6NdAddressAutoconfig") + api.RegisterMessage((*IP6NdAddressAutoconfigReply)(nil), "rd_cp.IP6NdAddressAutoconfigReply") +} + +// Messages returns list of all messages in this module. +func AllMessages() []api.Message { + return []api.Message{ + (*IP6NdAddressAutoconfig)(nil), + (*IP6NdAddressAutoconfigReply)(nil), + } +} + +// RPCService represents RPC service API for rd_cp module. +type RPCService interface { + IP6NdAddressAutoconfig(ctx context.Context, in *IP6NdAddressAutoconfig) (*IP6NdAddressAutoconfigReply, error) +} + +type serviceClient struct { + ch api.Channel +} + +func NewServiceClient(ch api.Channel) RPCService { + return &serviceClient{ch} +} + +func (c *serviceClient) IP6NdAddressAutoconfig(ctx context.Context, in *IP6NdAddressAutoconfig) (*IP6NdAddressAutoconfigReply, error) { + out := new(IP6NdAddressAutoconfigReply) + err := c.ch.SendRequest(in).ReceiveReply(out) + if err != nil { + return nil, err + } + return out, nil +} + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the GoVPP api package it is being compiled against. +// A compilation error at this line likely means your copy of the +// GoVPP api package needs to be updated. +const _ = api.GoVppAPIPackageIsVersion1 // please upgrade the GoVPP api package + +// Reference imports to suppress errors if they are not otherwise used. +var _ = api.RegisterMessage +var _ = bytes.NewBuffer +var _ = context.Background +var _ = io.Copy +var _ = strconv.Itoa +var _ = struc.Pack diff --git a/proto/ligato/vpp/vpp.pb.go b/proto/ligato/vpp/vpp.pb.go index 9733b50955..eb993d31a8 100644 --- a/proto/ligato/vpp/vpp.pb.go +++ b/proto/ligato/vpp/vpp.pb.go @@ -9,6 +9,7 @@ import ( abf "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/abf" acl "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/acl" interfaces "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" + ipfix "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/ipfix" ipsec "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/ipsec" l2 "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l2" l3 "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" @@ -29,38 +30,44 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// ConfigData holds the entire VPP configuration. type ConfigData struct { - Interfaces []*interfaces.Interface `protobuf:"bytes,10,rep,name=interfaces,proto3" json:"interfaces,omitempty"` - Spans []*interfaces.Span `protobuf:"bytes,11,rep,name=spans,proto3" json:"spans,omitempty"` - Acls []*acl.ACL `protobuf:"bytes,20,rep,name=acls,proto3" json:"acls,omitempty"` - Abfs []*abf.ABF `protobuf:"bytes,21,rep,name=abfs,proto3" json:"abfs,omitempty"` - BridgeDomains []*l2.BridgeDomain `protobuf:"bytes,30,rep,name=bridge_domains,json=bridgeDomains,proto3" json:"bridge_domains,omitempty"` - Fibs []*l2.FIBEntry `protobuf:"bytes,31,rep,name=fibs,proto3" json:"fibs,omitempty"` - XconnectPairs []*l2.XConnectPair `protobuf:"bytes,32,rep,name=xconnect_pairs,json=xconnectPairs,proto3" json:"xconnect_pairs,omitempty"` - Routes []*l3.Route `protobuf:"bytes,40,rep,name=routes,proto3" json:"routes,omitempty"` - Arps []*l3.ARPEntry `protobuf:"bytes,41,rep,name=arps,proto3" json:"arps,omitempty"` - ProxyArp *l3.ProxyARP `protobuf:"bytes,42,opt,name=proxy_arp,json=proxyArp,proto3" json:"proxy_arp,omitempty"` - IpscanNeighbor *l3.IPScanNeighbor `protobuf:"bytes,43,opt,name=ipscan_neighbor,json=ipscanNeighbor,proto3" json:"ipscan_neighbor,omitempty"` - Vrfs []*l3.VrfTable `protobuf:"bytes,44,rep,name=vrfs,proto3" json:"vrfs,omitempty"` - L3Xconnects []*l3.L3XConnect `protobuf:"bytes,45,rep,name=l3xconnects,proto3" json:"l3xconnects,omitempty"` - DhcpProxies []*l3.DHCPProxy `protobuf:"bytes,46,rep,name=dhcp_proxies,json=dhcpProxies,proto3" json:"dhcp_proxies,omitempty"` - Ip6Nds []*l3.IP6ND `protobuf:"bytes,47,rep,name=ip6nds,proto3" json:"ip6nds,omitempty"` - Nat44Global *nat.Nat44Global `protobuf:"bytes,50,opt,name=nat44_global,json=nat44Global,proto3" json:"nat44_global,omitempty"` - Dnat44S []*nat.DNat44 `protobuf:"bytes,51,rep,name=dnat44s,proto3" json:"dnat44s,omitempty"` - Nat44Interfaces []*nat.Nat44Interface `protobuf:"bytes,52,rep,name=nat44_interfaces,json=nat44Interfaces,proto3" json:"nat44_interfaces,omitempty"` - Nat44Pools []*nat.Nat44AddressPool `protobuf:"bytes,53,rep,name=nat44_pools,json=nat44Pools,proto3" json:"nat44_pools,omitempty"` - IpsecSpds []*ipsec.SecurityPolicyDatabase `protobuf:"bytes,60,rep,name=ipsec_spds,json=ipsecSpds,proto3" json:"ipsec_spds,omitempty"` - IpsecSas []*ipsec.SecurityAssociation `protobuf:"bytes,61,rep,name=ipsec_sas,json=ipsecSas,proto3" json:"ipsec_sas,omitempty"` - PuntIpredirects []*punt.IPRedirect `protobuf:"bytes,70,rep,name=punt_ipredirects,json=puntIpredirects,proto3" json:"punt_ipredirects,omitempty"` - PuntTohosts []*punt.ToHost `protobuf:"bytes,71,rep,name=punt_tohosts,json=puntTohosts,proto3" json:"punt_tohosts,omitempty"` - PuntExceptions []*punt.Exception `protobuf:"bytes,72,rep,name=punt_exceptions,json=puntExceptions,proto3" json:"punt_exceptions,omitempty"` - Srv6Global *srv6.SRv6Global `protobuf:"bytes,83,opt,name=srv6_global,json=srv6Global,proto3" json:"srv6_global,omitempty"` - Srv6Localsids []*srv6.LocalSID `protobuf:"bytes,80,rep,name=srv6_localsids,json=srv6Localsids,proto3" json:"srv6_localsids,omitempty"` - Srv6Policies []*srv6.Policy `protobuf:"bytes,81,rep,name=srv6_policies,json=srv6Policies,proto3" json:"srv6_policies,omitempty"` - Srv6Steerings []*srv6.Steering `protobuf:"bytes,82,rep,name=srv6_steerings,json=srv6Steerings,proto3" json:"srv6_steerings,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Interfaces []*interfaces.Interface `protobuf:"bytes,10,rep,name=interfaces,proto3" json:"interfaces,omitempty"` + Spans []*interfaces.Span `protobuf:"bytes,11,rep,name=spans,proto3" json:"spans,omitempty"` + Acls []*acl.ACL `protobuf:"bytes,20,rep,name=acls,proto3" json:"acls,omitempty"` + Abfs []*abf.ABF `protobuf:"bytes,21,rep,name=abfs,proto3" json:"abfs,omitempty"` + BridgeDomains []*l2.BridgeDomain `protobuf:"bytes,30,rep,name=bridge_domains,json=bridgeDomains,proto3" json:"bridge_domains,omitempty"` + Fibs []*l2.FIBEntry `protobuf:"bytes,31,rep,name=fibs,proto3" json:"fibs,omitempty"` + XconnectPairs []*l2.XConnectPair `protobuf:"bytes,32,rep,name=xconnect_pairs,json=xconnectPairs,proto3" json:"xconnect_pairs,omitempty"` + Routes []*l3.Route `protobuf:"bytes,40,rep,name=routes,proto3" json:"routes,omitempty"` + Arps []*l3.ARPEntry `protobuf:"bytes,41,rep,name=arps,proto3" json:"arps,omitempty"` + ProxyArp *l3.ProxyARP `protobuf:"bytes,42,opt,name=proxy_arp,json=proxyArp,proto3" json:"proxy_arp,omitempty"` + IpscanNeighbor *l3.IPScanNeighbor `protobuf:"bytes,43,opt,name=ipscan_neighbor,json=ipscanNeighbor,proto3" json:"ipscan_neighbor,omitempty"` + Vrfs []*l3.VrfTable `protobuf:"bytes,44,rep,name=vrfs,proto3" json:"vrfs,omitempty"` + L3Xconnects []*l3.L3XConnect `protobuf:"bytes,45,rep,name=l3xconnects,proto3" json:"l3xconnects,omitempty"` + DhcpProxies []*l3.DHCPProxy `protobuf:"bytes,46,rep,name=dhcp_proxies,json=dhcpProxies,proto3" json:"dhcp_proxies,omitempty"` + TeibEntries []*l3.TeibEntry `protobuf:"bytes,47,rep,name=teib_entries,json=teibEntries,proto3" json:"teib_entries,omitempty"` + Ip6Nds []*l3.IP6ND `protobuf:"bytes,48,rep,name=ip6nds,proto3" json:"ip6nds,omitempty"` + Nat44Global *nat.Nat44Global `protobuf:"bytes,50,opt,name=nat44_global,json=nat44Global,proto3" json:"nat44_global,omitempty"` + Dnat44S []*nat.DNat44 `protobuf:"bytes,51,rep,name=dnat44s,proto3" json:"dnat44s,omitempty"` + Nat44Interfaces []*nat.Nat44Interface `protobuf:"bytes,52,rep,name=nat44_interfaces,json=nat44Interfaces,proto3" json:"nat44_interfaces,omitempty"` + Nat44Pools []*nat.Nat44AddressPool `protobuf:"bytes,53,rep,name=nat44_pools,json=nat44Pools,proto3" json:"nat44_pools,omitempty"` + IpsecSpds []*ipsec.SecurityPolicyDatabase `protobuf:"bytes,60,rep,name=ipsec_spds,json=ipsecSpds,proto3" json:"ipsec_spds,omitempty"` + IpsecSas []*ipsec.SecurityAssociation `protobuf:"bytes,61,rep,name=ipsec_sas,json=ipsecSas,proto3" json:"ipsec_sas,omitempty"` + IpsecTunnelProtections []*ipsec.TunnelProtection `protobuf:"bytes,62,rep,name=ipsec_tunnel_protections,json=ipsecTunnelProtections,proto3" json:"ipsec_tunnel_protections,omitempty"` + PuntIpredirects []*punt.IPRedirect `protobuf:"bytes,70,rep,name=punt_ipredirects,json=puntIpredirects,proto3" json:"punt_ipredirects,omitempty"` + PuntTohosts []*punt.ToHost `protobuf:"bytes,71,rep,name=punt_tohosts,json=puntTohosts,proto3" json:"punt_tohosts,omitempty"` + PuntExceptions []*punt.Exception `protobuf:"bytes,72,rep,name=punt_exceptions,json=puntExceptions,proto3" json:"punt_exceptions,omitempty"` + Srv6Global *srv6.SRv6Global `protobuf:"bytes,83,opt,name=srv6_global,json=srv6Global,proto3" json:"srv6_global,omitempty"` + Srv6Localsids []*srv6.LocalSID `protobuf:"bytes,80,rep,name=srv6_localsids,json=srv6Localsids,proto3" json:"srv6_localsids,omitempty"` + Srv6Policies []*srv6.Policy `protobuf:"bytes,81,rep,name=srv6_policies,json=srv6Policies,proto3" json:"srv6_policies,omitempty"` + Srv6Steerings []*srv6.Steering `protobuf:"bytes,82,rep,name=srv6_steerings,json=srv6Steerings,proto3" json:"srv6_steerings,omitempty"` + IpfixGlobal *ipfix.IPFIX `protobuf:"bytes,90,opt,name=ipfix_global,json=ipfixGlobal,proto3" json:"ipfix_global,omitempty"` + IpfixFlowprobeParams *ipfix.FlowProbeParams `protobuf:"bytes,91,opt,name=ipfix_flowprobe_params,json=ipfixFlowprobeParams,proto3" json:"ipfix_flowprobe_params,omitempty"` + IpfixFlowprobes []*ipfix.FlowProbeFeature `protobuf:"bytes,92,rep,name=ipfix_flowprobes,json=ipfixFlowprobes,proto3" json:"ipfix_flowprobes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ConfigData) Reset() { *m = ConfigData{} } @@ -186,6 +193,13 @@ func (m *ConfigData) GetDhcpProxies() []*l3.DHCPProxy { return nil } +func (m *ConfigData) GetTeibEntries() []*l3.TeibEntry { + if m != nil { + return m.TeibEntries + } + return nil +} + func (m *ConfigData) GetIp6Nds() []*l3.IP6ND { if m != nil { return m.Ip6Nds @@ -235,6 +249,13 @@ func (m *ConfigData) GetIpsecSas() []*ipsec.SecurityAssociation { return nil } +func (m *ConfigData) GetIpsecTunnelProtections() []*ipsec.TunnelProtection { + if m != nil { + return m.IpsecTunnelProtections + } + return nil +} + func (m *ConfigData) GetPuntIpredirects() []*punt.IPRedirect { if m != nil { return m.PuntIpredirects @@ -284,6 +305,27 @@ func (m *ConfigData) GetSrv6Steerings() []*srv6.Steering { return nil } +func (m *ConfigData) GetIpfixGlobal() *ipfix.IPFIX { + if m != nil { + return m.IpfixGlobal + } + return nil +} + +func (m *ConfigData) GetIpfixFlowprobeParams() *ipfix.FlowProbeParams { + if m != nil { + return m.IpfixFlowprobeParams + } + return nil +} + +func (m *ConfigData) GetIpfixFlowprobes() []*ipfix.FlowProbeFeature { + if m != nil { + return m.IpfixFlowprobes + } + return nil +} + type Notification struct { Interface *interfaces.InterfaceNotification `protobuf:"bytes,1,opt,name=interface,proto3" json:"interface,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -371,66 +413,76 @@ func init() { func init() { proto.RegisterFile("ligato/vpp/vpp.proto", fileDescriptor_0138a1608d5d59f2) } var fileDescriptor_0138a1608d5d59f2 = []byte{ - // 970 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0x6d, 0x6f, 0xdb, 0x36, - 0x10, 0x46, 0xb1, 0xb6, 0x6b, 0xe8, 0xbc, 0x14, 0x5c, 0xd6, 0xb2, 0xd9, 0xd6, 0x65, 0x01, 0x82, - 0x65, 0x6d, 0x2a, 0x6f, 0x71, 0x96, 0x0f, 0x6b, 0x36, 0xd4, 0x2f, 0x75, 0xe2, 0xc1, 0x08, 0x34, - 0x3a, 0x18, 0x86, 0x7e, 0x11, 0xa8, 0x37, 0x87, 0x80, 0x26, 0x12, 0x3c, 0xc6, 0x48, 0xfe, 0xc3, - 0x7e, 0xf4, 0xc0, 0x93, 0x64, 0xcb, 0xb6, 0x82, 0x7e, 0x90, 0xa0, 0xe3, 0x3d, 0xcf, 0x73, 0xa7, - 0xe3, 0x1d, 0x49, 0x76, 0x33, 0x39, 0x15, 0x56, 0xb5, 0x67, 0x5a, 0xbb, 0xc7, 0xd3, 0x46, 0x59, - 0x45, 0x49, 0xb1, 0xea, 0xcd, 0xb4, 0xde, 0x63, 0x35, 0x84, 0x08, 0x53, 0xf7, 0x14, 0xa8, 0x65, - 0x4f, 0x94, 0xb9, 0xa7, 0xf4, 0x1c, 0xd6, 0x3c, 0x32, 0xb7, 0x89, 0x49, 0x45, 0x94, 0xc0, 0xe2, - 0xb3, 0x84, 0xed, 0x37, 0xc3, 0x40, 0x8b, 0xbc, 0x44, 0xfc, 0xf0, 0x00, 0xc2, 0x0a, 0x5b, 0x89, - 0x7c, 0x5b, 0x87, 0x68, 0x48, 0xa2, 0xe2, 0xdd, 0x20, 0x90, 0x9d, 0xb4, 0x43, 0x23, 0xe3, 0x69, - 0x12, 0xc4, 0xea, 0x5f, 0x21, 0xab, 0x18, 0x2f, 0x97, 0x21, 0xa9, 0x0c, 0x1b, 0x94, 0xb3, 0x93, - 0xf6, 0x5d, 0xa4, 0xf2, 0x3c, 0x89, 0x6c, 0x13, 0xad, 0xd3, 0x16, 0xa6, 0x2c, 0xde, 0xde, 0x8b, - 0x65, 0x47, 0xd6, 0x69, 0x28, 0x17, 0xae, 0xdf, 0x55, 0x49, 0xbe, 0x5a, 0xf6, 0x18, 0x75, 0x3b, - 0xff, 0xbb, 0x95, 0x28, 0x33, 0xd3, 0x54, 0xfc, 0x5c, 0x58, 0xf7, 0x94, 0x9e, 0xbd, 0x9a, 0x47, - 0xdf, 0xe6, 0x16, 0x5f, 0x0d, 0x3e, 0x30, 0xb3, 0x33, 0x7c, 0x15, 0xbe, 0x83, 0xff, 0xb6, 0x08, - 0xe9, 0xab, 0x3c, 0x95, 0xd3, 0x81, 0xb0, 0x82, 0x7e, 0x20, 0x64, 0x51, 0x71, 0x46, 0xf6, 0xbf, - 0x38, 0x6a, 0x9d, 0xec, 0x7b, 0x8b, 0xc6, 0xf0, 0x16, 0x5e, 0x6f, 0x54, 0x7d, 0xf2, 0x1a, 0x87, - 0xfe, 0x42, 0x9e, 0xb8, 0xad, 0x04, 0xd6, 0x42, 0xf2, 0x37, 0x0f, 0x90, 0x27, 0x5a, 0xe4, 0xbc, - 0x40, 0xd2, 0x1f, 0xc9, 0x63, 0x11, 0x65, 0xc0, 0x76, 0x91, 0xf1, 0x55, 0x9d, 0xe1, 0xba, 0xab, - 0xdb, 0x1f, 0x73, 0x04, 0x20, 0x30, 0x4c, 0x81, 0x7d, 0xdd, 0x00, 0x0c, 0x53, 0xaf, 0xdb, 0x1b, - 0x72, 0x04, 0xd0, 0x1e, 0xd9, 0x5e, 0xda, 0x74, 0x60, 0xaf, 0xd7, 0xb3, 0xc9, 0x4e, 0xbc, 0x1e, - 0x82, 0x06, 0x88, 0xe1, 0x5b, 0x61, 0xcd, 0x02, 0xfa, 0x96, 0x3c, 0x4e, 0x65, 0x08, 0xec, 0x7b, - 0x64, 0xbe, 0x5c, 0x61, 0x0e, 0x47, 0xbd, 0x8f, 0xb9, 0x35, 0xf7, 0x1c, 0x41, 0x2e, 0x60, 0xd5, - 0x29, 0x81, 0x16, 0xd2, 0x00, 0xdb, 0x6f, 0x0c, 0xf8, 0x4f, 0xbf, 0x00, 0xf9, 0x42, 0x1a, 0xbe, - 0x55, 0x51, 0x9c, 0x05, 0xf4, 0x98, 0x3c, 0xc5, 0x26, 0x00, 0x76, 0x84, 0xdc, 0xdd, 0x25, 0x6e, - 0xc7, 0xe3, 0xce, 0xc9, 0x4b, 0x8c, 0x4b, 0x4f, 0x18, 0x0d, 0xec, 0xa7, 0x86, 0xf4, 0x3a, 0x5e, - 0x97, 0xfb, 0x65, 0x7a, 0x0e, 0x44, 0x4f, 0xc9, 0x86, 0x36, 0xea, 0xee, 0x3e, 0x10, 0x46, 0xb3, - 0x37, 0xfb, 0x8f, 0x1a, 0x18, 0xbe, 0xf3, 0x77, 0xb9, 0xcf, 0x9f, 0x21, 0xb2, 0x6b, 0x34, 0x1d, - 0x92, 0x1d, 0xa9, 0x21, 0x12, 0x79, 0x90, 0x27, 0x72, 0x7a, 0x13, 0x2a, 0xc3, 0xde, 0x22, 0xf7, - 0xbb, 0x15, 0xee, 0xc8, 0x9f, 0x44, 0x22, 0xbf, 0x2a, 0x41, 0x7c, 0xbb, 0x60, 0x55, 0xb6, 0x4b, - 0x75, 0x66, 0x52, 0x60, 0xc7, 0x8d, 0xa9, 0xfe, 0x6d, 0xd2, 0x6b, 0x11, 0x66, 0x09, 0x47, 0x10, - 0x7d, 0x4f, 0x5a, 0x6e, 0x48, 0x8a, 0xc2, 0x00, 0x7b, 0x87, 0x9c, 0x57, 0x2b, 0x9c, 0x71, 0xa7, - 0x2a, 0x24, 0xaf, 0xa3, 0xe9, 0x7b, 0xb2, 0x19, 0xdf, 0x44, 0x3a, 0x70, 0xbf, 0x20, 0x13, 0x60, - 0x1e, 0xb2, 0xd9, 0x0a, 0x7b, 0x70, 0xd9, 0xf7, 0xf1, 0x77, 0x79, 0xcb, 0xa1, 0xfd, 0x02, 0xec, - 0xea, 0x2f, 0xf5, 0x59, 0x1e, 0x03, 0x6b, 0x37, 0xd6, 0x7f, 0xe4, 0x9f, 0x5d, 0x0d, 0x78, 0x89, - 0xa1, 0x7f, 0x90, 0xcd, 0x5c, 0xd8, 0xd3, 0xd3, 0x60, 0x9a, 0xa9, 0x50, 0x64, 0xec, 0x04, 0x2b, - 0xb3, 0xb4, 0xdf, 0x6e, 0x3a, 0xaf, 0x1c, 0xe6, 0x02, 0x21, 0xbc, 0x95, 0x2f, 0x0c, 0xfa, 0x33, - 0xf9, 0x32, 0x46, 0x1b, 0x58, 0x07, 0xc3, 0xbd, 0x58, 0xa5, 0x0e, 0x90, 0xcb, 0x2b, 0x18, 0x1d, - 0x91, 0xe7, 0x45, 0xc4, 0xda, 0x84, 0x9e, 0x22, 0xf5, 0x75, 0x63, 0xd4, 0xc5, 0x7c, 0xee, 0xe4, - 0x4b, 0x36, 0xd0, 0x2e, 0x29, 0x72, 0x09, 0xb4, 0x52, 0x19, 0xb0, 0x5f, 0xd7, 0xe7, 0x7c, 0xae, - 0xd2, 0x8d, 0x63, 0x93, 0x00, 0xf8, 0x4a, 0x65, 0x9c, 0x20, 0xc9, 0x7d, 0x02, 0xbd, 0x20, 0x04, - 0x8f, 0xdc, 0x00, 0x74, 0x0c, 0xec, 0x1c, 0x15, 0x8e, 0x96, 0x86, 0x1d, 0x0f, 0xe4, 0x49, 0x12, - 0xdd, 0x1a, 0x69, 0xef, 0x7d, 0x95, 0xc9, 0xe8, 0xde, 0x9d, 0x31, 0xa1, 0x80, 0x84, 0x6f, 0xa0, - 0x77, 0xa2, 0x63, 0x37, 0x3a, 0x1b, 0xa5, 0x90, 0x00, 0xf6, 0x3b, 0xea, 0x1c, 0x3e, 0xac, 0xd3, - 0x05, 0x50, 0x91, 0x14, 0x56, 0xaa, 0x9c, 0x3f, 0x2b, 0x44, 0x04, 0xd0, 0x21, 0x79, 0xee, 0xce, - 0xbb, 0x40, 0x6a, 0x93, 0xc4, 0xd2, 0x60, 0xe7, 0x0c, 0xd7, 0x07, 0x10, 0xcf, 0xc4, 0x91, 0xcf, - 0x4b, 0x0c, 0xdf, 0x71, 0x0b, 0xa3, 0x05, 0x87, 0xfe, 0x46, 0x36, 0x51, 0xc7, 0xaa, 0x1b, 0x05, - 0x16, 0xd8, 0xc5, 0x7a, 0xc7, 0xa2, 0xc6, 0xb5, 0xba, 0x54, 0x60, 0x79, 0xcb, 0x19, 0xd7, 0x05, - 0x96, 0xf6, 0x09, 0xca, 0x05, 0xc9, 0x5d, 0x94, 0x68, 0x97, 0x1f, 0xb0, 0x4b, 0xa4, 0xef, 0xad, - 0xd1, 0x3f, 0x56, 0x10, 0xbe, 0xed, 0xec, 0xb9, 0x09, 0xf4, 0x9c, 0xb4, 0xdc, 0xe1, 0x5c, 0x35, - 0xd5, 0x64, 0xbd, 0xa9, 0xf0, 0xec, 0x9e, 0xf0, 0xd9, 0x59, 0xd9, 0x54, 0xc4, 0x2d, 0x94, 0x3d, - 0xf5, 0x81, 0x6c, 0x23, 0x3b, 0x53, 0x91, 0xc8, 0x40, 0xc6, 0xc0, 0xfc, 0xf5, 0xf1, 0x41, 0x81, - 0xb1, 0x43, 0x4c, 0x46, 0x03, 0xbe, 0xe5, 0xcc, 0x71, 0x85, 0xa7, 0xe7, 0x04, 0x17, 0x02, 0xed, - 0xb6, 0xcb, 0x4d, 0xd0, 0x5f, 0xeb, 0x15, 0x40, 0x81, 0x62, 0x3f, 0xf9, 0xa6, 0x33, 0xfc, 0x12, - 0x3c, 0x8f, 0x0f, 0x36, 0x49, 0x8c, 0xcc, 0xa7, 0xc0, 0xf8, 0x03, 0xf1, 0x27, 0x25, 0xa2, 0x88, - 0x5f, 0x59, 0x70, 0xf0, 0x89, 0x6c, 0x5e, 0x29, 0x2b, 0x53, 0x19, 0xe1, 0x16, 0xd3, 0x3f, 0xc9, - 0xc6, 0xbc, 0xdb, 0xd9, 0x23, 0xac, 0xc6, 0xf1, 0xe7, 0xae, 0xa3, 0xba, 0x00, 0x5f, 0xd0, 0x0f, - 0xc6, 0xe4, 0xc9, 0xc4, 0x0a, 0xdc, 0xa9, 0x35, 0xd1, 0xc3, 0xcf, 0x89, 0x22, 0xb3, 0xa6, 0xd6, - 0x3b, 0xfe, 0xf4, 0x66, 0xaa, 0x2a, 0x96, 0xc4, 0xcb, 0xf5, 0x9d, 0x98, 0x26, 0xb9, 0x6d, 0xcf, - 0x3a, 0x6d, 0xbc, 0x5b, 0xdb, 0x8b, 0x6b, 0x37, 0x7c, 0x8a, 0x2b, 0x9d, 0xff, 0x03, 0x00, 0x00, - 0xff, 0xff, 0xca, 0x63, 0x17, 0x73, 0x7a, 0x09, 0x00, 0x00, + // 1128 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x96, 0x7f, 0x4f, 0xdc, 0x36, + 0x18, 0xc7, 0x55, 0xad, 0xed, 0x8a, 0x8f, 0x02, 0xf2, 0x18, 0x75, 0xd9, 0xd6, 0x51, 0xa4, 0x6a, + 0x5d, 0x4b, 0xef, 0x3a, 0x8e, 0xf1, 0xc7, 0xca, 0xaa, 0x1e, 0x5c, 0x0f, 0x6e, 0x62, 0x28, 0xf3, + 0xa1, 0xad, 0x62, 0x95, 0x22, 0x27, 0xe7, 0x1c, 0x96, 0xd2, 0xd8, 0xf2, 0x63, 0xae, 0xf0, 0x1a, + 0xf6, 0xa6, 0x27, 0x3f, 0x49, 0xee, 0x57, 0x82, 0xfa, 0x47, 0xa2, 0x3c, 0x7e, 0x3e, 0xdf, 0xaf, + 0x1d, 0xe7, 0xb1, 0x63, 0xb2, 0x9e, 0xaa, 0x91, 0x70, 0xba, 0x35, 0x36, 0xc6, 0x5f, 0x4d, 0x63, + 0xb5, 0xd3, 0x94, 0xe4, 0xad, 0xcd, 0xb1, 0x31, 0x9b, 0x6c, 0x86, 0x10, 0x51, 0xe2, 0xaf, 0x9c, + 0x9a, 0xcf, 0xc4, 0xa9, 0xbf, 0x8a, 0xcc, 0xf7, 0x33, 0x19, 0x65, 0x12, 0x75, 0x9d, 0xdf, 0x8b, + 0xec, 0x56, 0x25, 0x9b, 0xa4, 0xfa, 0xb3, 0xb1, 0x3a, 0x92, 0x05, 0xf1, 0x6c, 0x96, 0xc8, 0x9c, + 0xb4, 0x89, 0x88, 0x25, 0x4c, 0x1f, 0xeb, 0x8c, 0xa6, 0x18, 0x18, 0x91, 0x15, 0xc4, 0xd3, 0x5b, + 0x08, 0x27, 0x9c, 0xac, 0x1d, 0x2b, 0xc8, 0x38, 0xbf, 0xd7, 0x18, 0xa4, 0xbb, 0xad, 0xc8, 0xaa, + 0xe1, 0x48, 0x86, 0x43, 0xfd, 0x49, 0xa8, 0xb2, 0x8f, 0x47, 0xf3, 0x48, 0xa2, 0xa2, 0x1a, 0xe7, + 0x74, 0xb7, 0x75, 0x1d, 0xeb, 0x2c, 0x93, 0xb1, 0xab, 0x93, 0xb5, 0x5b, 0xc2, 0x16, 0x93, 0xbf, + 0xb9, 0x31, 0x9f, 0x48, 0xdb, 0x35, 0xd3, 0x8d, 0xed, 0xd7, 0xe5, 0x20, 0x1f, 0xcf, 0x67, 0xac, + 0xbe, 0x9a, 0xbc, 0xdd, 0x82, 0xc8, 0xc9, 0xc9, 0xe8, 0x16, 0xfa, 0x1f, 0xdb, 0xba, 0xcf, 0x9a, + 0x09, 0xe7, 0xaf, 0x22, 0xb3, 0x39, 0x93, 0x31, 0x57, 0x99, 0xc3, 0x5b, 0x4d, 0x0e, 0xec, 0x78, + 0x1f, 0x6f, 0x79, 0x6e, 0xfb, 0xbf, 0x35, 0x42, 0x8e, 0x74, 0x96, 0xa8, 0x51, 0x57, 0x38, 0x41, + 0xdf, 0x11, 0x32, 0xfd, 0x16, 0x8c, 0x6c, 0x7d, 0xf5, 0xbc, 0xb1, 0xbb, 0xd5, 0x9c, 0x96, 0x5c, + 0x73, 0x9a, 0x6d, 0xf6, 0xcb, 0x47, 0x3e, 0xa3, 0xa1, 0xbf, 0x90, 0x7b, 0xfe, 0x23, 0x03, 0x6b, + 0xa0, 0xf8, 0xbb, 0x5b, 0xc4, 0x03, 0x23, 0x32, 0x9e, 0x93, 0xf4, 0x27, 0x72, 0x57, 0xc4, 0x29, + 0xb0, 0x75, 0x54, 0x7c, 0x33, 0xab, 0xf0, 0x75, 0xdb, 0x39, 0x3a, 0xe5, 0x08, 0x20, 0x18, 0x25, + 0xc0, 0xbe, 0xad, 0x01, 0xa3, 0xa4, 0xd9, 0x39, 0xec, 0x71, 0x04, 0xe8, 0x21, 0x59, 0x99, 0x2b, + 0x07, 0x60, 0x4f, 0xaa, 0xa3, 0x49, 0x77, 0x9b, 0x87, 0x08, 0x75, 0x91, 0xe1, 0x0f, 0xa3, 0x99, + 0x08, 0xe8, 0x4b, 0x72, 0x37, 0x51, 0x11, 0xb0, 0x1f, 0x51, 0xf9, 0x68, 0x41, 0xd9, 0xeb, 0x1f, + 0xbe, 0xcf, 0x9c, 0xbd, 0xe1, 0x08, 0xf9, 0x0e, 0xcb, 0x1a, 0x0a, 0x8d, 0x50, 0x16, 0xd8, 0x56, + 0x6d, 0x87, 0x1f, 0x8e, 0x72, 0x28, 0x10, 0xca, 0xf2, 0x87, 0xa5, 0xc4, 0x47, 0x40, 0x77, 0xc8, + 0x7d, 0x2c, 0x0f, 0x60, 0xcf, 0x51, 0xbb, 0x3e, 0xa7, 0x6d, 0x37, 0xb9, 0x4f, 0xf2, 0x82, 0xf1, + 0xc3, 0x13, 0xd6, 0x00, 0xfb, 0xb9, 0x66, 0x78, 0xed, 0x66, 0x87, 0x07, 0xc5, 0xf0, 0x3c, 0x44, + 0xf7, 0xc8, 0x92, 0xb1, 0xfa, 0xfa, 0x26, 0x14, 0xd6, 0xb0, 0x17, 0x5b, 0x77, 0x6a, 0x14, 0x81, + 0xcf, 0x77, 0x78, 0xc0, 0x1f, 0x20, 0xd9, 0xb1, 0x86, 0xf6, 0xc8, 0xaa, 0x32, 0x10, 0x8b, 0x2c, + 0xcc, 0xa4, 0x1a, 0x5d, 0x46, 0xda, 0xb2, 0x97, 0xa8, 0xfd, 0x61, 0x41, 0xdb, 0x0f, 0x06, 0xb1, + 0xc8, 0xce, 0x0a, 0x88, 0xaf, 0xe4, 0xaa, 0x32, 0xf6, 0x43, 0x1d, 0xdb, 0x04, 0xd8, 0x4e, 0xed, + 0x50, 0xff, 0xb6, 0xc9, 0xb9, 0x88, 0x52, 0xc9, 0x11, 0xa2, 0x6f, 0x48, 0xc3, 0x2f, 0x9f, 0x7c, + 0x62, 0x80, 0xbd, 0x42, 0xcd, 0xe3, 0x05, 0xcd, 0x69, 0xbb, 0x9c, 0x48, 0x3e, 0x4b, 0xd3, 0x37, + 0x64, 0x79, 0x78, 0x19, 0x9b, 0xd0, 0xbf, 0x82, 0x92, 0xc0, 0x9a, 0xa8, 0x66, 0x0b, 0xea, 0xee, + 0xc9, 0x51, 0x80, 0xaf, 0xcb, 0x1b, 0x9e, 0x0e, 0x72, 0xd8, 0x8b, 0xfd, 0x1a, 0x0c, 0x65, 0xe6, + 0xac, 0x17, 0xb7, 0x6a, 0xc5, 0xe7, 0x52, 0x45, 0xf9, 0xd4, 0x36, 0x5c, 0xf1, 0xe8, 0xc5, 0x3b, + 0xe4, 0xbe, 0x32, 0xfb, 0xd9, 0x10, 0xd8, 0xeb, 0xda, 0x8f, 0xd7, 0x0f, 0xf6, 0xcf, 0xba, 0xbc, + 0x60, 0xe8, 0x5b, 0xb2, 0x9c, 0x09, 0xb7, 0xb7, 0x17, 0x8e, 0x52, 0x1d, 0x89, 0x94, 0xed, 0xe2, + 0xb4, 0xce, 0x15, 0x8b, 0x5f, 0xda, 0x67, 0x9e, 0x39, 0x46, 0x84, 0x37, 0xb2, 0x69, 0x40, 0x5f, + 0x93, 0xaf, 0x87, 0x18, 0x03, 0x6b, 0x63, 0x77, 0x1b, 0x8b, 0xd2, 0x2e, 0x6a, 0x79, 0x89, 0xd1, + 0x3e, 0x59, 0xcb, 0x7b, 0x9c, 0x59, 0xde, 0x7b, 0x28, 0x7d, 0x52, 0xdb, 0xeb, 0x74, 0x71, 0xaf, + 0x66, 0x73, 0x31, 0xd0, 0x0e, 0xc9, 0xc7, 0x12, 0x1a, 0xad, 0x53, 0x60, 0xbf, 0x56, 0x37, 0x89, + 0x89, 0x4b, 0x67, 0x38, 0xb4, 0x12, 0x20, 0xd0, 0x3a, 0xe5, 0x04, 0x45, 0xfe, 0x11, 0xe8, 0x31, + 0x21, 0xb8, 0x93, 0x87, 0x60, 0x86, 0xc0, 0x0e, 0xd0, 0xe1, 0xf9, 0xdc, 0x4e, 0x81, 0xfb, 0xfc, + 0x40, 0xc6, 0x57, 0x56, 0xb9, 0x9b, 0x40, 0xa7, 0x2a, 0xbe, 0xf1, 0x1b, 0x54, 0x24, 0x40, 0xf2, + 0x25, 0xcc, 0x0e, 0xcc, 0xd0, 0xaf, 0xbb, 0xa5, 0xc2, 0x48, 0x00, 0xfb, 0x1d, 0x7d, 0x9e, 0xdd, + 0xee, 0xd3, 0x01, 0xd0, 0xb1, 0x12, 0x4e, 0xe9, 0x8c, 0x3f, 0xc8, 0x4d, 0x04, 0xd0, 0x8f, 0x84, + 0xe5, 0x1e, 0xee, 0x2a, 0xcb, 0x64, 0xea, 0x8b, 0xc7, 0xc9, 0xd8, 0x43, 0xc0, 0xde, 0xa2, 0xe5, + 0x76, 0xd5, 0xf2, 0x1c, 0xd9, 0x60, 0x82, 0xf2, 0x0d, 0x6c, 0x5f, 0x6c, 0x06, 0xda, 0x23, 0x6b, + 0x7e, 0x2b, 0x0e, 0x95, 0xb1, 0x72, 0xa8, 0x2c, 0x16, 0x75, 0xaf, 0xba, 0x37, 0xe0, 0x76, 0xdd, + 0x0f, 0x78, 0xc1, 0xf0, 0x55, 0xdf, 0xd0, 0x9f, 0x6a, 0xe8, 0x6f, 0x64, 0x19, 0x7d, 0x9c, 0xbe, + 0xd4, 0xe0, 0x80, 0x1d, 0x57, 0x17, 0x13, 0x7a, 0x9c, 0xeb, 0x13, 0x0d, 0x8e, 0x37, 0x7c, 0x70, + 0x9e, 0xb3, 0xf4, 0x88, 0xa0, 0x5d, 0x28, 0xaf, 0x63, 0x69, 0xf2, 0x17, 0x3b, 0x41, 0xf9, 0x66, + 0x45, 0xfe, 0xbe, 0x44, 0xf8, 0x8a, 0x8f, 0x27, 0x21, 0xd0, 0x03, 0xd2, 0xf0, 0xff, 0x8d, 0xb2, + 0x64, 0x07, 0xd5, 0x92, 0xc5, 0xdf, 0xca, 0x80, 0x8f, 0xf7, 0x8b, 0x92, 0x25, 0xbe, 0xa1, 0xa8, + 0xd8, 0x77, 0x64, 0x05, 0xd5, 0xa9, 0x8e, 0x45, 0x0a, 0x6a, 0x08, 0x2c, 0xa8, 0xae, 0x6c, 0x34, + 0x38, 0xf5, 0xc4, 0xa0, 0xdf, 0xe5, 0x0f, 0x7d, 0x78, 0x5a, 0xf2, 0xf4, 0x80, 0x60, 0x43, 0x68, + 0x7c, 0x31, 0xf8, 0xf5, 0xf9, 0x57, 0x75, 0x06, 0xd0, 0x20, 0xaf, 0x16, 0xbe, 0xec, 0x83, 0xa0, + 0x80, 0x27, 0xfd, 0x83, 0x93, 0xd2, 0xaa, 0x6c, 0x04, 0x8c, 0xdf, 0xd2, 0xff, 0xa0, 0x20, 0xf2, + 0xfe, 0xcb, 0x08, 0x3f, 0x00, 0x9e, 0x88, 0xca, 0x09, 0xb8, 0xa8, 0x6e, 0xa3, 0xf9, 0x49, 0xaa, + 0x1f, 0xf4, 0xfa, 0x1f, 0x78, 0x03, 0x83, 0xe2, 0xed, 0xff, 0x21, 0x1b, 0xb9, 0x76, 0x72, 0x9a, + 0x0a, 0x8d, 0xb0, 0xe2, 0x13, 0xb0, 0x7f, 0xd1, 0xe5, 0x69, 0xd5, 0xa5, 0x97, 0xea, 0xcf, 0x81, + 0x27, 0x03, 0x04, 0xf9, 0x3a, 0x36, 0xf7, 0x4a, 0x7d, 0xde, 0x4a, 0xff, 0x24, 0x6b, 0x0b, 0xc6, + 0xc0, 0x3e, 0xd6, 0xd5, 0xec, 0x9c, 0x65, 0x4f, 0x0a, 0x77, 0x65, 0x25, 0x5f, 0x9d, 0xf7, 0x84, + 0xed, 0x0b, 0xb2, 0x7c, 0xa6, 0x9d, 0x4a, 0x54, 0x8c, 0x8b, 0x84, 0xfe, 0x41, 0x96, 0x26, 0xfb, + 0x05, 0xbb, 0x83, 0x43, 0xdd, 0xf9, 0xd2, 0x69, 0x60, 0xd6, 0x80, 0x4f, 0xe5, 0xdb, 0xa7, 0xe4, + 0xde, 0xc0, 0x09, 0xac, 0xc6, 0x8a, 0xe9, 0xb3, 0x2f, 0x99, 0xa2, 0x72, 0xc6, 0xed, 0x70, 0xe7, + 0xe2, 0xc5, 0x48, 0x97, 0x2a, 0x85, 0x67, 0x9b, 0x57, 0x62, 0x24, 0x33, 0xd7, 0x1a, 0xb7, 0x5b, + 0x78, 0xb4, 0x69, 0x4d, 0x4f, 0x3d, 0xd1, 0x7d, 0x6c, 0x69, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, + 0x0a, 0xf6, 0xd7, 0x5c, 0x53, 0x0b, 0x00, 0x00, } From 0a754512075f9f536ae823ad0ba805289c711ffb Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Mon, 6 Jul 2020 15:25:50 +0200 Subject: [PATCH 09/13] Update buf version Signed-off-by: Ondrej Fabry --- scripts/make/buf.make | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/make/buf.make b/scripts/make/buf.make index e34c300d7d..9b9659b4f9 100644 --- a/scripts/make/buf.make +++ b/scripts/make/buf.make @@ -11,8 +11,8 @@ endif REMOTE_GIT := https://github.com/ligato/vpp-agent.git CHECK_BREAKING_BRANCH := master -# https://github.com/bufbuild/buf/releases 20200101 -BUF_VERSION := 0.5.0 +# https://github.com/bufbuild/buf/releases 20200625 +BUF_VERSION := 0.18.1 # https://github.com/golang/protobuf/releases 20190709 PROTOC_GEN_GO_VERSION ?= v1.3.3 # https://github.com/protocolbuffers/protobuf/releases 20191213 From b4907e3977a4171018aee8c2bdb15a05e4d225ef Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Tue, 7 Jul 2020 15:19:10 +0200 Subject: [PATCH 10/13] Fix registering descriptor Signed-off-by: Ondrej Fabry --- plugins/vpp/l3plugin/l3plugin.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/vpp/l3plugin/l3plugin.go b/plugins/vpp/l3plugin/l3plugin.go index dd4895b105..a51020f09a 100644 --- a/plugins/vpp/l3plugin/l3plugin.go +++ b/plugins/vpp/l3plugin/l3plugin.go @@ -103,6 +103,7 @@ func (p *L3Plugin) Init() (err error) { dhcpProxyDescriptor := descriptor.NewDHCPProxyDescriptor(p.KVScheduler, p.l3Handler, p.Log) l3xcDescriptor := descriptor.NewL3XCDescriptor(p.l3Handler, p.IfPlugin.GetInterfaceIndex(), p.Log) teibDescriptor := descriptor.NewTeibDescriptor(p.KVScheduler, p.l3Handler, p.Log) + ip6ndDescriptor := descriptor.NewIP6ndDescriptor(p.KVScheduler, p.l3Handler, p.Log) err = p.Deps.KVScheduler.RegisterKVDescriptor( routeDescriptor, @@ -113,6 +114,7 @@ func (p *L3Plugin) Init() (err error) { dhcpProxyDescriptor, l3xcDescriptor, teibDescriptor, + ip6ndDescriptor, ) if err != nil { return err From cf662b9959b5d9663deb122afbfdb7bafb498ad5 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Tue, 7 Jul 2020 15:38:00 +0200 Subject: [PATCH 11/13] Enable IPv6 ND for VPP 20.01 Signed-off-by: Ondrej Fabry --- .../vppcalls/vpp2001/ip6nd_vppcalls.go | 20 ++++++++++++-- .../vppcalls/vpp2001/vppcalls_handlers.go | 27 +++++++++++++++++++ tests/integration/vpp/032_ip6nd_test.go | 4 +-- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/plugins/vpp/l3plugin/vppcalls/vpp2001/ip6nd_vppcalls.go b/plugins/vpp/l3plugin/vppcalls/vpp2001/ip6nd_vppcalls.go index 428a1cd41c..243cf6eec8 100644 --- a/plugins/vpp/l3plugin/vppcalls/vpp2001/ip6nd_vppcalls.go +++ b/plugins/vpp/l3plugin/vppcalls/vpp2001/ip6nd_vppcalls.go @@ -17,8 +17,24 @@ package vpp2001 import ( "context" "fmt" + + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/interface_types" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/rd_cp" ) -func (h *L3VppHandler) SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error { - return fmt.Errorf("not supported for this VPP version") +func (h *IP6ndHandler) SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error { + meta, found := h.ifIndexes.LookupByName(iface) + if !found { + return fmt.Errorf("interface %s not found", iface) + } + + _, err := h.rpcRdCp.IP6NdAddressAutoconfig(ctx, &rd_cp.IP6NdAddressAutoconfig{ + SwIfIndex: interface_types.InterfaceIndex(meta.SwIfIndex), + Enable: enable, + InstallDefaultRoutes: installDefaultRoutes, + }) + if err != nil { + return err + } + return nil } diff --git a/plugins/vpp/l3plugin/vppcalls/vpp2001/vppcalls_handlers.go b/plugins/vpp/l3plugin/vppcalls/vpp2001/vppcalls_handlers.go index 92866cbb35..4a85c272b9 100644 --- a/plugins/vpp/l3plugin/vppcalls/vpp2001/vppcalls_handlers.go +++ b/plugins/vpp/l3plugin/vppcalls/vpp2001/vppcalls_handlers.go @@ -30,9 +30,11 @@ import ( "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001" vpp_dhcp "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/dhcp" vpp_ip "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/ip" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/ip6_nd" vpp_ip_neighbor "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/ip_neighbor" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/ip_types" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/l3xc" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/rd_cp" vpp_vpe "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/vpe" "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/ifaceidx" "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/vppcalls" @@ -59,6 +61,7 @@ type L3VppHandler struct { *DHCPProxyHandler *L3XCHandler *TeibHandlerUnsupported + *IP6ndHandler } func NewL3VppHandler( @@ -82,6 +85,7 @@ func NewL3VppHandler( DHCPProxyHandler: NewDHCPProxyHandler(ch, log), L3XCHandler: NewL3XCHandler(c, ifIdx, log), TeibHandlerUnsupported: &TeibHandlerUnsupported{}, + IP6ndHandler: NewIP6ndVppHandler(ch, ifIdx, log), } } @@ -127,6 +131,16 @@ type VrfTableHandler struct { log logging.Logger } +// IP6ndHandler is accessor for IP6ND-related vppcalls methods +type IP6ndHandler struct { + rpcIP6nd ip6_nd.RPCService + rpcRdCp rd_cp.RPCService + callsChannel govppapi.Channel + ifIndexes ifaceidx.IfaceMetadataIndex + log logging.Logger +} + + // NewArpVppHandler creates new instance of IPsec vppcalls handler func NewArpVppHandler(callsChan govppapi.Channel, ifIndexes ifaceidx.IfaceMetadataIndex, log logging.Logger) *ArpVppHandler { if log == nil { @@ -240,6 +254,19 @@ func (h *TeibHandlerUnsupported) DumpTeib() ([]*l3.TeibEntry, error) { return nil, fmt.Errorf("%w in VPP %s", vppcalls.ErrTeibUnsupported, vpp2001.Version) } +func NewIP6ndVppHandler(ch govppapi.Channel, ifIndexes ifaceidx.IfaceMetadataIndex, log logging.Logger) *IP6ndHandler { + if log == nil { + log = logrus.NewLogger("ip6nd-handler") + } + return &IP6ndHandler{ + rpcIP6nd: ip6_nd.NewServiceClient(ch), + rpcRdCp: rd_cp.NewServiceClient(ch), + callsChannel: ch, + ifIndexes: ifIndexes, + log: log, + } +} + func ipToAddress(ipstr string) (addr vpp_ip.Address, err error) { netIP := net.ParseIP(ipstr) if netIP == nil { diff --git a/tests/integration/vpp/032_ip6nd_test.go b/tests/integration/vpp/032_ip6nd_test.go index 65803a74fa..afee74954d 100644 --- a/tests/integration/vpp/032_ip6nd_test.go +++ b/tests/integration/vpp/032_ip6nd_test.go @@ -35,8 +35,8 @@ func TestIP6ND(t *testing.T) { test := setupVPP(t) defer test.teardownVPP() - if test.versionInfo.Release() < "20.05" { - t.Skipf("SKIP for VPP %s<20.05", test.versionInfo.Release()) + if test.versionInfo.Release() < "20.01" { + t.Skipf("SKIP for VPP %s<20.01", test.versionInfo.Release()) } ih := ifplugin_vppcalls.CompatibleInterfaceVppHandler(test.vppClient, logrus.NewLogger("test")) From a4fc27f0b687adf54459bcec5e0fcf2d26110939 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Tue, 14 Jul 2020 17:15:35 +0200 Subject: [PATCH 12/13] Move IP6ND config to Interface model Signed-off-by: Ondrej Fabry --- go.mod | 4 +- go.sum | 33 +- .../descriptor/adapter/ip6nd.go | 24 +- plugins/vpp/ifplugin/descriptor/interface.go | 8 + .../ifplugin/descriptor/interface_address.go | 2 +- plugins/vpp/ifplugin/descriptor/ip6nd.go | 137 +++++++ plugins/vpp/ifplugin/ifplugin.go | 6 +- .../vppcalls/interface_handler_api.go | 6 + .../vppcalls/vpp1904/ip6nd_vppcalls.go | 2 +- .../vppcalls/vpp1908/ip6nd_vppcalls.go | 2 +- .../vppcalls/vpp2001/ip6nd_vppcalls.go | 10 +- .../vppcalls/vpp2001/vppcalls_handler.go | 6 + .../vpp2005/dump_interface_vppcalls.go | 1 + .../vppcalls/vpp2005/ip6nd_vppcalls.go | 23 +- .../vppcalls/vpp2005/vppcalls_handler.go | 6 + plugins/vpp/l3plugin/descriptor/ip6nd.go | 119 ------ plugins/vpp/l3plugin/l3plugin.go | 3 - plugins/vpp/l3plugin/vppcalls/l3_vppcalls.go | 6 - .../vppcalls/vpp2001/vppcalls_handlers.go | 27 -- .../vppcalls/vpp2005/vppcalls_handlers.go | 26 -- proto/ligato/vpp/interfaces/interface.pb.go | 382 +++++++++++------- proto/ligato/vpp/interfaces/interface.proto | 16 + proto/ligato/vpp/interfaces/models.go | 23 ++ proto/ligato/vpp/l3/l3.pb.go | 134 ++---- proto/ligato/vpp/l3/l3.proto | 10 - proto/ligato/vpp/l3/models.go | 15 - proto/ligato/vpp/vpp.pb.go | 151 ++++--- proto/ligato/vpp/vpp.proto | 1 - tests/integration/vpp/032_ip6nd_test.go | 9 +- 29 files changed, 594 insertions(+), 598 deletions(-) rename plugins/vpp/{l3plugin => ifplugin}/descriptor/adapter/ip6nd.go (85%) create mode 100644 plugins/vpp/ifplugin/descriptor/ip6nd.go rename plugins/vpp/{l3plugin => ifplugin}/vppcalls/vpp1904/ip6nd_vppcalls.go (85%) rename plugins/vpp/{l3plugin => ifplugin}/vppcalls/vpp1908/ip6nd_vppcalls.go (85%) rename plugins/vpp/{l3plugin => ifplugin}/vppcalls/vpp2001/ip6nd_vppcalls.go (76%) rename plugins/vpp/{l3plugin => ifplugin}/vppcalls/vpp2005/ip6nd_vppcalls.go (63%) delete mode 100644 plugins/vpp/l3plugin/descriptor/ip6nd.go diff --git a/go.mod b/go.mod index 81a0d8623f..f4e67550aa 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( github.com/fsouza/go-dockerclient v1.2.2 github.com/ghodss/yaml v1.0.0 github.com/go-errors/errors v1.0.1 - github.com/golang/protobuf v1.3.3 + github.com/golang/protobuf v1.4.2 github.com/gorilla/mux v1.6.2 github.com/gorilla/websocket v1.4.1 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 @@ -56,6 +56,8 @@ require ( golang.org/x/net v0.0.0-20190620200207-3b0461eec859 golang.org/x/sys v0.0.0-20200501145240-bc7a7d42d5c3 golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0 // indirect + google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df // indirect google.golang.org/grpc v1.27.1 + google.golang.org/protobuf v1.25.0 // indirect gotest.tools v2.2.0+incompatible // indirect ) diff --git a/go.sum b/go.sum index 8fbcd63ca9..ab7d19e128 100644 --- a/go.sum +++ b/go.sum @@ -141,8 +141,15 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -153,8 +160,12 @@ github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk= @@ -443,6 +454,8 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135 h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= @@ -453,14 +466,30 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA google.golang.org/genproto v0.0.0-20181101192439-c830210a61df/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df h1:HWF6nM8ruGdu1K8IXFR+i2oT3YP+iBfZzCbC9zUfcWo= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= diff --git a/plugins/vpp/l3plugin/descriptor/adapter/ip6nd.go b/plugins/vpp/ifplugin/descriptor/adapter/ip6nd.go similarity index 85% rename from plugins/vpp/l3plugin/descriptor/adapter/ip6nd.go rename to plugins/vpp/ifplugin/descriptor/adapter/ip6nd.go index 9e2b045784..8d1ce8b8f3 100644 --- a/plugins/vpp/l3plugin/descriptor/adapter/ip6nd.go +++ b/plugins/vpp/ifplugin/descriptor/adapter/ip6nd.go @@ -5,14 +5,14 @@ package adapter import ( "github.com/golang/protobuf/proto" . "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" - "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" + "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" ) ////////// type-safe key-value pair with metadata ////////// type IP6NDKVWithMetadata struct { Key string - Value *vpp_l3.IP6ND + Value *vpp_interfaces.Interface_IP6ND Metadata interface{} Origin ValueOrigin } @@ -24,19 +24,19 @@ type IP6NDDescriptor struct { KeySelector KeySelector ValueTypeName string KeyLabel func(key string) string - ValueComparator func(key string, oldValue, newValue *vpp_l3.IP6ND) bool + ValueComparator func(key string, oldValue, newValue *vpp_interfaces.Interface_IP6ND) bool NBKeyPrefix string WithMetadata bool MetadataMapFactory MetadataMapFactory - Validate func(key string, value *vpp_l3.IP6ND) error - Create func(key string, value *vpp_l3.IP6ND) (metadata interface{}, err error) - Delete func(key string, value *vpp_l3.IP6ND, metadata interface{}) error - Update func(key string, oldValue, newValue *vpp_l3.IP6ND, oldMetadata interface{}) (newMetadata interface{}, err error) - UpdateWithRecreate func(key string, oldValue, newValue *vpp_l3.IP6ND, metadata interface{}) bool + Validate func(key string, value *vpp_interfaces.Interface_IP6ND) error + Create func(key string, value *vpp_interfaces.Interface_IP6ND) (metadata interface{}, err error) + Delete func(key string, value *vpp_interfaces.Interface_IP6ND, metadata interface{}) error + Update func(key string, oldValue, newValue *vpp_interfaces.Interface_IP6ND, oldMetadata interface{}) (newMetadata interface{}, err error) + UpdateWithRecreate func(key string, oldValue, newValue *vpp_interfaces.Interface_IP6ND, metadata interface{}) bool Retrieve func(correlate []IP6NDKVWithMetadata) ([]IP6NDKVWithMetadata, error) IsRetriableFailure func(err error) bool - DerivedValues func(key string, value *vpp_l3.IP6ND) []KeyValuePair - Dependencies func(key string, value *vpp_l3.IP6ND) []Dependency + DerivedValues func(key string, value *vpp_interfaces.Interface_IP6ND) []KeyValuePair + Dependencies func(key string, value *vpp_interfaces.Interface_IP6ND) []Dependency RetrieveDependencies []string /* descriptor name */ } @@ -213,8 +213,8 @@ func (da *IP6NDDescriptorAdapter) Dependencies(key string, value proto.Message) ////////// Helper methods ////////// -func castIP6NDValue(key string, value proto.Message) (*vpp_l3.IP6ND, error) { - typedValue, ok := value.(*vpp_l3.IP6ND) +func castIP6NDValue(key string, value proto.Message) (*vpp_interfaces.Interface_IP6ND, error) { + typedValue, ok := value.(*vpp_interfaces.Interface_IP6ND) if !ok { return nil, ErrInvalidValueType(key, value) } diff --git a/plugins/vpp/ifplugin/descriptor/interface.go b/plugins/vpp/ifplugin/descriptor/interface.go index 5a25b85739..463315621c 100644 --- a/plugins/vpp/ifplugin/descriptor/interface.go +++ b/plugins/vpp/ifplugin/descriptor/interface.go @@ -809,6 +809,14 @@ func (d *InterfaceDescriptor) DerivedValues(key string, intf *interfaces.Interfa }) } + // IP6ND config + if intf.GetIp6Nd() != nil { + derValues = append(derValues, kvs.KeyValuePair{ + Key: interfaces.IP6NDKey(intf.Name), + Value: intf.GetIp6Nd(), + }) + } + // IP addresses for _, ipAddr := range intf.IpAddresses { derValues = append(derValues, kvs.KeyValuePair{ diff --git a/plugins/vpp/ifplugin/descriptor/interface_address.go b/plugins/vpp/ifplugin/descriptor/interface_address.go index a158b7a993..1f51607302 100644 --- a/plugins/vpp/ifplugin/descriptor/interface_address.go +++ b/plugins/vpp/ifplugin/descriptor/interface_address.go @@ -64,7 +64,7 @@ func NewInterfaceAddressDescriptor(ifHandler vppcalls.InterfaceVppAPI, addrAlloc } } -// IsInterfaceVrfKey returns true if the key represents assignment of an IP address +// IsInterfaceAddressKey returns true if the key represents assignment of an IP address // to a VPP interface (that needs to be applied). KVs representing addresses // already allocated from netalloc plugin or obtained from a DHCP server are // excluded. diff --git a/plugins/vpp/ifplugin/descriptor/ip6nd.go b/plugins/vpp/ifplugin/descriptor/ip6nd.go new file mode 100644 index 0000000000..2a094aea7c --- /dev/null +++ b/plugins/vpp/ifplugin/descriptor/ip6nd.go @@ -0,0 +1,137 @@ +// Copyright (c) 2020 Cisco and/or its affiliates. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at: +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package descriptor + +import ( + "context" + + "github.com/go-errors/errors" + "go.ligato.io/cn-infra/v2/logging" + + kvs "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" + "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/descriptor/adapter" + "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/ifaceidx" + "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/vppcalls" + interfaces "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" +) + +const ( + // IP6ndDescriptorName is the name of the descriptor. + IP6ndDescriptorName = "vpp-ip6nd" +) + +// IP6ndDescriptor instructs KVScheduler how to configure VPP IP6ND entries. +type IP6ndDescriptor struct { + log logging.Logger + handler vppcalls.IP6ndVppAPI + scheduler kvs.KVScheduler + ifIndex ifaceidx.IfaceMetadataIndex +} + +// NewIP6ndDescriptor creates a new instance of the IP6ndDescriptor. +func NewIP6ndDescriptor(scheduler kvs.KVScheduler, handler vppcalls.IP6ndVppAPI, + ifIndex ifaceidx.IfaceMetadataIndex, log logging.PluginLogger) *kvs.KVDescriptor { + + ctx := &IP6ndDescriptor{ + scheduler: scheduler, + handler: handler, + ifIndex: ifIndex, + log: log.NewLogger("ip6nd-descriptor"), + } + + typedDescr := &adapter.IP6NDDescriptor{ + Name: IP6ndDescriptorName, + KeySelector: ctx.IsIP6NDRelatedKey, + KeyLabel: ctx.InterfaceNameFromKey, + Create: ctx.Create, + Delete: ctx.Delete, + //Retrieve: ctx.Retrieve, + RetrieveDependencies: []string{InterfaceDescriptorName}, + } + return adapter.NewIP6NDDescriptor(typedDescr) +} + +// IsIP6NDRelatedKey returns true if the key is identifying IP6ND config (derived value) +func (d *IP6ndDescriptor) IsIP6NDRelatedKey(key string) bool { + if _, isValid := interfaces.ParseNameFromIP6NDKey(key); isValid { + return true + } + return false +} + +// InterfaceNameFromKey returns interface name from IP6ND-related key. +func (d *IP6ndDescriptor) InterfaceNameFromKey(key string) string { + if iface, isValid := interfaces.ParseNameFromIP6NDKey(key); isValid { + return iface + } + return key +} + +// Create adds a VPP IP6ND entry. +func (d *IP6ndDescriptor) Create(key string, entry *interfaces.Interface_IP6ND) (metadata interface{}, err error) { + ifName, _ := interfaces.ParseNameFromIP6NDKey(key) + ifMeta, found := d.ifIndex.LookupByName(ifName) + if !found { + err = errors.Errorf("failed to find IP6ND-enabled interface %s", ifName) + d.log.Error(err) + return nil, err + } + + if err := d.handler.SetIP6ndAutoconfig(context.Background(), ifMeta.SwIfIndex, entry.AddressAutoconfig, entry.InstallDefaultRoutes); err != nil { + err = errors.Errorf("failed to enable IP6ND for interface %s", ifName) + d.log.Error(err) + return nil, err + } + + return nil, err +} + +// Delete removes a VPP IP6ND entry. +func (d *IP6ndDescriptor) Delete(key string, entry *interfaces.Interface_IP6ND, metadata interface{}) (err error) { + ifName, _ := interfaces.ParseNameFromIP6NDKey(key) + ifMeta, found := d.ifIndex.LookupByName(ifName) + if !found { + err = errors.Errorf("failed to find IP6ND-enabled interface %s", ifName) + d.log.Error(err) + return err + } + + if err := d.handler.SetIP6ndAutoconfig(context.Background(), ifMeta.SwIfIndex, false, false); err != nil { + err = errors.Errorf("failed to disable IP6ND for interface %s", ifName) + d.log.Error(err) + return err + } + + return nil +} + +// Retrieve returns all IP6ND entries. +// TODO: implement retrieve +/*func (d *IP6ndDescriptor) Retrieve(correlate []adapter.IP6NDKVWithMetadata) ( + retrieved []adapter.IP6NDKVWithMetadata, err error, +) { + entries, err := d.handler.DumpIP6ND() + if err != nil { + return nil, err + } + for _, entry := range entries { + retrieved = append(retrieved, adapter.IP6NDKVWithMetadata{ + Key: models.Key(entry), + Value: entry, + Origin: kvs.UnknownOrigin, + }) + } + return +}*/ diff --git a/plugins/vpp/ifplugin/ifplugin.go b/plugins/vpp/ifplugin/ifplugin.go index 55a1d17387..df131cf8ae 100644 --- a/plugins/vpp/ifplugin/ifplugin.go +++ b/plugins/vpp/ifplugin/ifplugin.go @@ -18,6 +18,7 @@ //go:generate descriptor-adapter --descriptor-name RxPlacement --value-type *vpp_interfaces.Interface_RxPlacement --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" --output-dir "descriptor" //go:generate descriptor-adapter --descriptor-name BondedInterface --value-type *vpp_interfaces.BondLink_BondedInterface --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" --output-dir "descriptor" //go:generate descriptor-adapter --descriptor-name Span --value-type *vpp_interfaces.Span --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" --output-dir "descriptor" +//go:generate descriptor-adapter --descriptor-name IP6ND --value-type *vpp_interfaces.Interface_IP6ND --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" --output-dir "descriptor" package ifplugin @@ -26,13 +27,12 @@ import ( "sync" "time" - "go.ligato.io/cn-infra/v2/servicelabel" - "github.com/pkg/errors" "go.ligato.io/cn-infra/v2/datasync" "go.ligato.io/cn-infra/v2/health/statuscheck" "go.ligato.io/cn-infra/v2/idxmap" "go.ligato.io/cn-infra/v2/infra" + "go.ligato.io/cn-infra/v2/servicelabel" "go.ligato.io/cn-infra/v2/utils/safeclose" "go.ligato.io/vpp-agent/v3/plugins/govppmux" @@ -182,6 +182,7 @@ func (p *IfPlugin) Init() (err error) { withAddrDescriptor := descriptor.NewInterfaceWithAddrDescriptor(p.Log) spanDescriptor, spanDescriptorCtx := descriptor.NewSpanDescriptor(p.ifHandler, p.Log) spanDescriptorCtx.SetInterfaceIndex(p.intfIndex) + ip6ndDescriptor := descriptor.NewIP6ndDescriptor(p.KVScheduler, p.ifHandler, p.intfIndex, p.Log) err = p.KVScheduler.RegisterKVDescriptor( dhcpDescriptor, @@ -194,6 +195,7 @@ func (p *IfPlugin) Init() (err error) { vrfDescriptor, withAddrDescriptor, spanDescriptor, + ip6ndDescriptor, ) if err != nil { return err diff --git a/plugins/vpp/ifplugin/vppcalls/interface_handler_api.go b/plugins/vpp/ifplugin/vppcalls/interface_handler_api.go index e5c41e5cd3..57fedd9902 100644 --- a/plugins/vpp/ifplugin/vppcalls/interface_handler_api.go +++ b/plugins/vpp/ifplugin/vppcalls/interface_handler_api.go @@ -122,6 +122,7 @@ type InterfaceVppAPI interface { MemifAPI Wmxnet3API + IP6ndVppAPI // AddAfPacketInterface calls AfPacketCreate VPP binary API. AddAfPacketInterface(ifName, hwAddr, targetHostIfName string) (swIndex uint32, err error) @@ -274,6 +275,11 @@ type InterfaceVppRead interface { WatchDHCPLeases(ctx context.Context, leases chan<- *Lease) error } +// IP6ndVppAPI provides methods for managing IPv6 ND configuration. +type IP6ndVppAPI interface { + SetIP6ndAutoconfig(ctx context.Context, ifIdx uint32, enable, installDefaultRoutes bool) error +} + var Handler = vpp.RegisterHandler(vpp.HandlerDesc{ Name: "interface", HandlerAPI: (*InterfaceVppAPI)(nil), diff --git a/plugins/vpp/l3plugin/vppcalls/vpp1904/ip6nd_vppcalls.go b/plugins/vpp/ifplugin/vppcalls/vpp1904/ip6nd_vppcalls.go similarity index 85% rename from plugins/vpp/l3plugin/vppcalls/vpp1904/ip6nd_vppcalls.go rename to plugins/vpp/ifplugin/vppcalls/vpp1904/ip6nd_vppcalls.go index 70ef855a97..cce67ecaba 100644 --- a/plugins/vpp/l3plugin/vppcalls/vpp1904/ip6nd_vppcalls.go +++ b/plugins/vpp/ifplugin/vppcalls/vpp1904/ip6nd_vppcalls.go @@ -19,6 +19,6 @@ import ( "fmt" ) -func (h *L3VppHandler) SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error { +func (h *InterfaceVppHandler) SetIP6ndAutoconfig(ctx context.Context, ifIdx uint32, enable, installDefaultRoutes bool) error { return fmt.Errorf("not supported for this VPP version") } diff --git a/plugins/vpp/l3plugin/vppcalls/vpp1908/ip6nd_vppcalls.go b/plugins/vpp/ifplugin/vppcalls/vpp1908/ip6nd_vppcalls.go similarity index 85% rename from plugins/vpp/l3plugin/vppcalls/vpp1908/ip6nd_vppcalls.go rename to plugins/vpp/ifplugin/vppcalls/vpp1908/ip6nd_vppcalls.go index f67b3a5993..6463cb5ac4 100644 --- a/plugins/vpp/l3plugin/vppcalls/vpp1908/ip6nd_vppcalls.go +++ b/plugins/vpp/ifplugin/vppcalls/vpp1908/ip6nd_vppcalls.go @@ -19,6 +19,6 @@ import ( "fmt" ) -func (h *L3VppHandler) SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error { +func (h *InterfaceVppHandler) SetIP6ndAutoconfig(ctx context.Context, ifIdx uint32, enable, installDefaultRoutes bool) error { return fmt.Errorf("not supported for this VPP version") } diff --git a/plugins/vpp/l3plugin/vppcalls/vpp2001/ip6nd_vppcalls.go b/plugins/vpp/ifplugin/vppcalls/vpp2001/ip6nd_vppcalls.go similarity index 76% rename from plugins/vpp/l3plugin/vppcalls/vpp2001/ip6nd_vppcalls.go rename to plugins/vpp/ifplugin/vppcalls/vpp2001/ip6nd_vppcalls.go index 243cf6eec8..1ea558292f 100644 --- a/plugins/vpp/l3plugin/vppcalls/vpp2001/ip6nd_vppcalls.go +++ b/plugins/vpp/ifplugin/vppcalls/vpp2001/ip6nd_vppcalls.go @@ -16,20 +16,14 @@ package vpp2001 import ( "context" - "fmt" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/interface_types" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/rd_cp" ) -func (h *IP6ndHandler) SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error { - meta, found := h.ifIndexes.LookupByName(iface) - if !found { - return fmt.Errorf("interface %s not found", iface) - } - +func (h *InterfaceVppHandler) SetIP6ndAutoconfig(ctx context.Context, ifIdx uint32, enable, installDefaultRoutes bool) error { _, err := h.rpcRdCp.IP6NdAddressAutoconfig(ctx, &rd_cp.IP6NdAddressAutoconfig{ - SwIfIndex: interface_types.InterfaceIndex(meta.SwIfIndex), + SwIfIndex: interface_types.InterfaceIndex(ifIdx), Enable: enable, InstallDefaultRoutes: installDefaultRoutes, }) diff --git a/plugins/vpp/ifplugin/vppcalls/vpp2001/vppcalls_handler.go b/plugins/vpp/ifplugin/vppcalls/vpp2001/vppcalls_handler.go index e6742a8177..27800cbc27 100644 --- a/plugins/vpp/ifplugin/vppcalls/vpp2001/vppcalls_handler.go +++ b/plugins/vpp/ifplugin/vppcalls/vpp2001/vppcalls_handler.go @@ -34,6 +34,8 @@ import ( "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/tapv2" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/vmxnet3" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/vxlan" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/ip6_nd" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/rd_cp" "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/vppcalls" ) @@ -81,6 +83,8 @@ type InterfaceVppHandler struct { gtpu gtpu.RPCService memif memif.RPCService vmxnet3 vmxnet3.RPCService + rpcIP6nd ip6_nd.RPCService + rpcRdCp rd_cp.RPCService log logging.Logger } @@ -94,6 +98,8 @@ func NewInterfaceVppHandler(c vpp.Client, log logging.Logger) vppcalls.Interface callsChannel: ch, interfaces: interfaces.NewServiceClient(ch), ipsec: ipsec.NewServiceClient(ch), + rpcIP6nd: ip6_nd.NewServiceClient(ch), + rpcRdCp: rd_cp.NewServiceClient(ch), log: log, } if c.IsPluginLoaded(gtpu.ModuleName) { diff --git a/plugins/vpp/ifplugin/vppcalls/vpp2005/dump_interface_vppcalls.go b/plugins/vpp/ifplugin/vppcalls/vpp2005/dump_interface_vppcalls.go index 10daef613f..e2b53b509e 100644 --- a/plugins/vpp/ifplugin/vppcalls/vpp2005/dump_interface_vppcalls.go +++ b/plugins/vpp/ifplugin/vppcalls/vpp2005/dump_interface_vppcalls.go @@ -169,6 +169,7 @@ func (h *InterfaceVppHandler) dumpInterfaces(ifIdxs ...uint32) (map[uint32]*vppc } func (h *InterfaceVppHandler) DumpInterfaces(ctx context.Context) (map[uint32]*vppcalls.InterfaceDetails, error) { + // Dump all interfaces interfaces, err := h.dumpInterfaces() if err != nil { return nil, err diff --git a/plugins/vpp/l3plugin/vppcalls/vpp2005/ip6nd_vppcalls.go b/plugins/vpp/ifplugin/vppcalls/vpp2005/ip6nd_vppcalls.go similarity index 63% rename from plugins/vpp/l3plugin/vppcalls/vpp2005/ip6nd_vppcalls.go rename to plugins/vpp/ifplugin/vppcalls/vpp2005/ip6nd_vppcalls.go index d3344086a7..f8a07f3bfc 100644 --- a/plugins/vpp/l3plugin/vppcalls/vpp2005/ip6nd_vppcalls.go +++ b/plugins/vpp/ifplugin/vppcalls/vpp2005/ip6nd_vppcalls.go @@ -16,20 +16,14 @@ package vpp2005 import ( "context" - "fmt" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/interface_types" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/rd_cp" ) -func (h *IP6ndHandler) SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error { - meta, found := h.ifIndexes.LookupByName(iface) - if !found { - return fmt.Errorf("interface %s not found", iface) - } - +func (h *InterfaceVppHandler) SetIP6ndAutoconfig(ctx context.Context, ifIdx uint32, enable, installDefaultRoutes bool) error { _, err := h.rpcRdCp.IP6NdAddressAutoconfig(ctx, &rd_cp.IP6NdAddressAutoconfig{ - SwIfIndex: interface_types.InterfaceIndex(meta.SwIfIndex), + SwIfIndex: interface_types.InterfaceIndex(ifIdx), Enable: enable, InstallDefaultRoutes: installDefaultRoutes, }) @@ -38,16 +32,3 @@ func (h *IP6ndHandler) SetIP6ndAutoconfig(ctx context.Context, iface string, ena } return nil } - -/*func (h *IP6ndHandler) DumpIP6nd(ctx context.Context, iface string) error { - meta, found := h.ifIndexes.LookupByName(iface) - if !found { - return fmt.Errorf("interface %s not found", iface) - } - - _, err := h.rpcIP6nd. - if err != nil { - return err - } - return nil -}*/ diff --git a/plugins/vpp/ifplugin/vppcalls/vpp2005/vppcalls_handler.go b/plugins/vpp/ifplugin/vppcalls/vpp2005/vppcalls_handler.go index 2e5f0f19da..2f4f30ed94 100644 --- a/plugins/vpp/ifplugin/vppcalls/vpp2005/vppcalls_handler.go +++ b/plugins/vpp/ifplugin/vppcalls/vpp2005/vppcalls_handler.go @@ -26,11 +26,13 @@ import ( "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/gre" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/gtpu" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/interfaces" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip6_nd" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ipsec" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/l2" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/memif" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/span" + "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/rd_cp" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/tapv2" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/vmxnet3" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/vxlan" @@ -81,6 +83,8 @@ type InterfaceVppHandler struct { gtpu gtpu.RPCService memif memif.RPCService vmxnet3 vmxnet3.RPCService + rpcIP6nd ip6_nd.RPCService + rpcRdCp rd_cp.RPCService log logging.Logger } @@ -94,6 +98,8 @@ func NewInterfaceVppHandler(c vpp.Client, log logging.Logger) vppcalls.Interface callsChannel: ch, interfaces: interfaces.NewServiceClient(ch), ipsec: ipsec.NewServiceClient(ch), + rpcIP6nd: ip6_nd.NewServiceClient(ch), + rpcRdCp: rd_cp.NewServiceClient(ch), log: log, } if c.IsPluginLoaded(gtpu.ModuleName) { diff --git a/plugins/vpp/l3plugin/descriptor/ip6nd.go b/plugins/vpp/l3plugin/descriptor/ip6nd.go deleted file mode 100644 index b889d6011b..0000000000 --- a/plugins/vpp/l3plugin/descriptor/ip6nd.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) 2020 Cisco and/or its affiliates. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at: -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package descriptor - -import ( - "context" - "fmt" - - "go.ligato.io/cn-infra/v2/logging" - - kvs "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api" - ifdescriptor "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/descriptor" - "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/descriptor/adapter" - "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/vppcalls" - interfaces "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/interfaces" - l3 "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" -) - -const ( - // IP6ndDescriptorName is the name of the descriptor. - IP6ndDescriptorName = "vpp-ip6nd" - - // dependency labels - ip6ndEntryInterfaceDep = "interface-exists" -) - -// IP6ndDescriptor instructs KVScheduler how to configure VPP TEIB entries. -type IP6ndDescriptor struct { - log logging.Logger - handler vppcalls.IP6ndVppAPI - scheduler kvs.KVScheduler -} - -// NewIP6ndDescriptor creates a new instance of the IP6ndDescriptor. -func NewIP6ndDescriptor(scheduler kvs.KVScheduler, - handler vppcalls.IP6ndVppAPI, log logging.PluginLogger) *kvs.KVDescriptor { - - ctx := &IP6ndDescriptor{ - scheduler: scheduler, - handler: handler, - log: log.NewLogger("ip6nd-descriptor"), - } - - typedDescr := &adapter.IP6NDDescriptor{ - Name: IP6ndDescriptorName, - NBKeyPrefix: l3.ModelIP6ND.KeyPrefix(), - ValueTypeName: l3.ModelIP6ND.ProtoName(), - KeySelector: l3.ModelIP6ND.IsKeyValid, - KeyLabel: l3.ModelIP6ND.StripKeyPrefix, - Validate: ctx.Validate, - Create: ctx.Create, - Delete: ctx.Delete, - Retrieve: ctx.Retrieve, - Dependencies: ctx.Dependencies, - RetrieveDependencies: []string{ifdescriptor.InterfaceDescriptorName}, - } - return adapter.NewIP6NDDescriptor(typedDescr) -} - -// Validate validates VPP IP6ND entry configuration. -func (d *IP6ndDescriptor) Validate(key string, entry *l3.IP6ND) (err error) { - if entry.Interface == "" { - return kvs.NewInvalidValueError(fmt.Errorf("no interface defined"), "interface") - } - return nil -} - -// Create adds a VPP IP6ND entry. -func (d *IP6ndDescriptor) Create(key string, entry *l3.IP6ND) (interface{}, error) { - return nil, d.handler.SetIP6ndAutoconfig(context.Background(), entry.Interface, entry.Autoconfig, entry.InstallDefaultRoutes) -} - -// Delete removes a VPP IP6ND entry. -func (d *IP6ndDescriptor) Delete(key string, entry *l3.IP6ND, metadata interface{}) error { - return d.handler.SetIP6ndAutoconfig(context.Background(), entry.Interface, false, false) -} - -// Retrieve returns all IP6ND entries. -func (d *IP6ndDescriptor) Retrieve(correlate []adapter.IP6NDKVWithMetadata) ( - retrieved []adapter.IP6NDKVWithMetadata, err error, -) { - // TODO: implement retrieve - /*entries, err := d.handler.DumpIP6ND() - if err != nil { - return nil, err - } - for _, entry := range entries { - retrieved = append(retrieved, adapter.IP6NDKVWithMetadata{ - Key: models.Key(entry), - Value: entry, - Origin: kvs.UnknownOrigin, - }) - }*/ - return -} - -// Dependencies lists dependencies for a VPP IP6ND entry. -func (d *IP6ndDescriptor) Dependencies(key string, entry *l3.IP6ND) (deps []kvs.Dependency) { - - // the referenced interface must exist - deps = append(deps, kvs.Dependency{ - Label: ip6ndEntryInterfaceDep, - Key: interfaces.InterfaceKey(entry.Interface), - }) - - return deps -} diff --git a/plugins/vpp/l3plugin/l3plugin.go b/plugins/vpp/l3plugin/l3plugin.go index a51020f09a..3e42fb65fc 100644 --- a/plugins/vpp/l3plugin/l3plugin.go +++ b/plugins/vpp/l3plugin/l3plugin.go @@ -21,7 +21,6 @@ //go:generate descriptor-adapter --descriptor-name DHCPProxy --value-type *vpp_l3.DHCPProxy --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" --output-dir "descriptor" //go:generate descriptor-adapter --descriptor-name L3XC --value-type *vpp_l3.L3XConnect --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" --output-dir "descriptor" //go:generate descriptor-adapter --descriptor-name TeibEntry --value-type *vpp_l3.TeibEntry --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" --output-dir "descriptor" -//go:generate descriptor-adapter --descriptor-name IP6ND --value-type *vpp_l3.IP6ND --import "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" --output-dir "descriptor" package l3plugin @@ -103,7 +102,6 @@ func (p *L3Plugin) Init() (err error) { dhcpProxyDescriptor := descriptor.NewDHCPProxyDescriptor(p.KVScheduler, p.l3Handler, p.Log) l3xcDescriptor := descriptor.NewL3XCDescriptor(p.l3Handler, p.IfPlugin.GetInterfaceIndex(), p.Log) teibDescriptor := descriptor.NewTeibDescriptor(p.KVScheduler, p.l3Handler, p.Log) - ip6ndDescriptor := descriptor.NewIP6ndDescriptor(p.KVScheduler, p.l3Handler, p.Log) err = p.Deps.KVScheduler.RegisterKVDescriptor( routeDescriptor, @@ -114,7 +112,6 @@ func (p *L3Plugin) Init() (err error) { dhcpProxyDescriptor, l3xcDescriptor, teibDescriptor, - ip6ndDescriptor, ) if err != nil { return err diff --git a/plugins/vpp/l3plugin/vppcalls/l3_vppcalls.go b/plugins/vpp/l3plugin/vppcalls/l3_vppcalls.go index 947634bb69..a02a587bff 100644 --- a/plugins/vpp/l3plugin/vppcalls/l3_vppcalls.go +++ b/plugins/vpp/l3plugin/vppcalls/l3_vppcalls.go @@ -47,7 +47,6 @@ type L3VppAPI interface { DHCPProxyAPI L3XCVppAPI TeibVppAPI - IP6ndVppAPI } // ArpDetails holds info about ARP entry as a proto model @@ -262,11 +261,6 @@ type L3XCVppAPI interface { DeleteL3XC(ctx context.Context, index uint32, ipv6 bool) error } -// IP6ndVppAPI provides methods for managing IPv6 ND configuration. -type IP6ndVppAPI interface { - SetIP6ndAutoconfig(ctx context.Context, iface string, enable, installDefaultRoutes bool) error -} - var Handler = vpp.RegisterHandler(vpp.HandlerDesc{ Name: "l3", HandlerAPI: (*L3VppAPI)(nil), diff --git a/plugins/vpp/l3plugin/vppcalls/vpp2001/vppcalls_handlers.go b/plugins/vpp/l3plugin/vppcalls/vpp2001/vppcalls_handlers.go index 4a85c272b9..92866cbb35 100644 --- a/plugins/vpp/l3plugin/vppcalls/vpp2001/vppcalls_handlers.go +++ b/plugins/vpp/l3plugin/vppcalls/vpp2001/vppcalls_handlers.go @@ -30,11 +30,9 @@ import ( "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001" vpp_dhcp "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/dhcp" vpp_ip "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/ip" - "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/ip6_nd" vpp_ip_neighbor "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/ip_neighbor" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/ip_types" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/l3xc" - "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/rd_cp" vpp_vpe "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2001/vpe" "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/ifaceidx" "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/vppcalls" @@ -61,7 +59,6 @@ type L3VppHandler struct { *DHCPProxyHandler *L3XCHandler *TeibHandlerUnsupported - *IP6ndHandler } func NewL3VppHandler( @@ -85,7 +82,6 @@ func NewL3VppHandler( DHCPProxyHandler: NewDHCPProxyHandler(ch, log), L3XCHandler: NewL3XCHandler(c, ifIdx, log), TeibHandlerUnsupported: &TeibHandlerUnsupported{}, - IP6ndHandler: NewIP6ndVppHandler(ch, ifIdx, log), } } @@ -131,16 +127,6 @@ type VrfTableHandler struct { log logging.Logger } -// IP6ndHandler is accessor for IP6ND-related vppcalls methods -type IP6ndHandler struct { - rpcIP6nd ip6_nd.RPCService - rpcRdCp rd_cp.RPCService - callsChannel govppapi.Channel - ifIndexes ifaceidx.IfaceMetadataIndex - log logging.Logger -} - - // NewArpVppHandler creates new instance of IPsec vppcalls handler func NewArpVppHandler(callsChan govppapi.Channel, ifIndexes ifaceidx.IfaceMetadataIndex, log logging.Logger) *ArpVppHandler { if log == nil { @@ -254,19 +240,6 @@ func (h *TeibHandlerUnsupported) DumpTeib() ([]*l3.TeibEntry, error) { return nil, fmt.Errorf("%w in VPP %s", vppcalls.ErrTeibUnsupported, vpp2001.Version) } -func NewIP6ndVppHandler(ch govppapi.Channel, ifIndexes ifaceidx.IfaceMetadataIndex, log logging.Logger) *IP6ndHandler { - if log == nil { - log = logrus.NewLogger("ip6nd-handler") - } - return &IP6ndHandler{ - rpcIP6nd: ip6_nd.NewServiceClient(ch), - rpcRdCp: rd_cp.NewServiceClient(ch), - callsChannel: ch, - ifIndexes: ifIndexes, - log: log, - } -} - func ipToAddress(ipstr string) (addr vpp_ip.Address, err error) { netIP := net.ParseIP(ipstr) if netIP == nil { diff --git a/plugins/vpp/l3plugin/vppcalls/vpp2005/vppcalls_handlers.go b/plugins/vpp/l3plugin/vppcalls/vpp2005/vppcalls_handlers.go index 9edcbf937a..4ef39da92d 100644 --- a/plugins/vpp/l3plugin/vppcalls/vpp2005/vppcalls_handlers.go +++ b/plugins/vpp/l3plugin/vppcalls/vpp2005/vppcalls_handlers.go @@ -29,11 +29,9 @@ import ( "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005" vpp_dhcp "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/dhcp" vpp_ip "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip" - "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip6_nd" vpp_ip_neighbor "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip_neighbor" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/ip_types" "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/l3xc" - "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/rd_cp" vpp_vpe "go.ligato.io/vpp-agent/v3/plugins/vpp/binapi/vpp2005/vpe" "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/ifaceidx" "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/vppcalls" @@ -59,7 +57,6 @@ type L3VppHandler struct { *DHCPProxyHandler *L3XCHandler *TeibHandler - *IP6ndHandler } func NewL3VppHandler( @@ -83,7 +80,6 @@ func NewL3VppHandler( DHCPProxyHandler: NewDHCPProxyHandler(ch, log), L3XCHandler: NewL3XCHandler(c, ifIdx, log), TeibHandler: NewTeibVppHandler(ch, ifIdx, log), - IP6ndHandler: NewIP6ndVppHandler(ch, ifIdx, log), } } @@ -136,15 +132,6 @@ type TeibHandler struct { log logging.Logger } -// IP6ndHandler is accessor for IP6ND-related vppcalls methods -type IP6ndHandler struct { - rpcIP6nd ip6_nd.RPCService - rpcRdCp rd_cp.RPCService - callsChannel govppapi.Channel - ifIndexes ifaceidx.IfaceMetadataIndex - log logging.Logger -} - // NewArpVppHandler creates new instance of IPsec vppcalls handler func NewArpVppHandler(callsChan govppapi.Channel, ifIndexes ifaceidx.IfaceMetadataIndex, log logging.Logger) *ArpVppHandler { if log == nil { @@ -230,19 +217,6 @@ func NewTeibVppHandler(callsChan govppapi.Channel, ifIndexes ifaceidx.IfaceMetad } } -func NewIP6ndVppHandler(ch govppapi.Channel, ifIndexes ifaceidx.IfaceMetadataIndex, log logging.Logger) *IP6ndHandler { - if log == nil { - log = logrus.NewLogger("ip6nd-handler") - } - return &IP6ndHandler{ - rpcIP6nd: ip6_nd.NewServiceClient(ch), - rpcRdCp: rd_cp.NewServiceClient(ch), - callsChannel: ch, - ifIndexes: ifIndexes, - log: log, - } -} - type L3XCHandler struct { l3xc l3xc.RPCService ifIndexes ifaceidx.IfaceMetadataIndex diff --git a/proto/ligato/vpp/interfaces/interface.pb.go b/proto/ligato/vpp/interfaces/interface.pb.go index 1a3a252131..e1cd4a7955 100644 --- a/proto/ligato/vpp/interfaces/interface.pb.go +++ b/proto/ligato/vpp/interfaces/interface.pb.go @@ -115,7 +115,7 @@ func (x Interface_RxMode_Type) String() string { } func (Interface_RxMode_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8b053108eedee97b, []int{0, 1, 0} + return fileDescriptor_8b053108eedee97b, []int{0, 2, 0} } type SubInterface_TagRewriteOptions int32 @@ -420,12 +420,16 @@ type Interface struct { // The VRF table must be explicitely configured (see api/models/vpp/l3/vrf.proto). // When using unnumbered interface the actual vrf is inherited from // the interface referenced by the numbered interface and this field is ignored. - Vrf uint32 `protobuf:"varint,6,opt,name=vrf,proto3" json:"vrf,omitempty"` - SetDhcpClient bool `protobuf:"varint,7,opt,name=set_dhcp_client,json=setDhcpClient,proto3" json:"set_dhcp_client,omitempty"` - Mtu uint32 `protobuf:"varint,8,opt,name=mtu,proto3" json:"mtu,omitempty"` - Unnumbered *Interface_Unnumbered `protobuf:"bytes,9,opt,name=unnumbered,proto3" json:"unnumbered,omitempty"` - RxModes []*Interface_RxMode `protobuf:"bytes,12,rep,name=rx_modes,json=rxModes,proto3" json:"rx_modes,omitempty"` - RxPlacements []*Interface_RxPlacement `protobuf:"bytes,13,rep,name=rx_placements,json=rxPlacements,proto3" json:"rx_placements,omitempty"` + Vrf uint32 `protobuf:"varint,6,opt,name=vrf,proto3" json:"vrf,omitempty"` + // SetDhcpClient enables DHCP client on interface. + SetDhcpClient bool `protobuf:"varint,7,opt,name=set_dhcp_client,json=setDhcpClient,proto3" json:"set_dhcp_client,omitempty"` + Ip6Nd *Interface_IP6ND `protobuf:"bytes,14,opt,name=ip6_nd,json=ip6Nd,proto3" json:"ip6_nd,omitempty"` + // Mtu sets MTU (Maximum Transmission Unit) for this interface. + // If set to zero, default MTU (usually 9216) will be used. + Mtu uint32 `protobuf:"varint,8,opt,name=mtu,proto3" json:"mtu,omitempty"` + Unnumbered *Interface_Unnumbered `protobuf:"bytes,9,opt,name=unnumbered,proto3" json:"unnumbered,omitempty"` + RxModes []*Interface_RxMode `protobuf:"bytes,12,rep,name=rx_modes,json=rxModes,proto3" json:"rx_modes,omitempty"` + RxPlacements []*Interface_RxPlacement `protobuf:"bytes,13,rep,name=rx_placements,json=rxPlacements,proto3" json:"rx_placements,omitempty"` // Link defines configuration for specific interface types. // It can be nil for some interfaces types like: loopback and DPDK. // @@ -521,6 +525,13 @@ func (m *Interface) GetSetDhcpClient() bool { return false } +func (m *Interface) GetIp6Nd() *Interface_IP6ND { + if m != nil { + return m.Ip6Nd + } + return nil +} + func (m *Interface) GetMtu() uint32 { if m != nil { return m.Mtu @@ -721,7 +732,60 @@ func (*Interface) XXX_OneofWrappers() []interface{} { } } +// Ip6Nd is used to enable/disable IPv6 ND address autoconfiguration +// and setting up default routes +type Interface_IP6ND struct { + // Enable IPv6 ND address autoconfiguration. + AddressAutoconfig bool `protobuf:"varint,1,opt,name=address_autoconfig,json=addressAutoconfig,proto3" json:"address_autoconfig,omitempty"` + // Enable installing default routes. + InstallDefaultRoutes bool `protobuf:"varint,2,opt,name=install_default_routes,json=installDefaultRoutes,proto3" json:"install_default_routes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Interface_IP6ND) Reset() { *m = Interface_IP6ND{} } +func (m *Interface_IP6ND) String() string { return proto.CompactTextString(m) } +func (*Interface_IP6ND) ProtoMessage() {} +func (*Interface_IP6ND) Descriptor() ([]byte, []int) { + return fileDescriptor_8b053108eedee97b, []int{0, 0} +} + +func (m *Interface_IP6ND) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Interface_IP6ND.Unmarshal(m, b) +} +func (m *Interface_IP6ND) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Interface_IP6ND.Marshal(b, m, deterministic) +} +func (m *Interface_IP6ND) XXX_Merge(src proto.Message) { + xxx_messageInfo_Interface_IP6ND.Merge(m, src) +} +func (m *Interface_IP6ND) XXX_Size() int { + return xxx_messageInfo_Interface_IP6ND.Size(m) +} +func (m *Interface_IP6ND) XXX_DiscardUnknown() { + xxx_messageInfo_Interface_IP6ND.DiscardUnknown(m) +} + +var xxx_messageInfo_Interface_IP6ND proto.InternalMessageInfo + +func (m *Interface_IP6ND) GetAddressAutoconfig() bool { + if m != nil { + return m.AddressAutoconfig + } + return false +} + +func (m *Interface_IP6ND) GetInstallDefaultRoutes() bool { + if m != nil { + return m.InstallDefaultRoutes + } + return false +} + +// Unnumbered is used for inheriting IP address from another interface. type Interface_Unnumbered struct { + // InterfaceWithIp is the name of interface to inherit IP address from. InterfaceWithIp string `protobuf:"bytes,1,opt,name=interface_with_ip,json=interfaceWithIp,proto3" json:"interface_with_ip,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -732,7 +796,7 @@ func (m *Interface_Unnumbered) Reset() { *m = Interface_Unnumbered{} } func (m *Interface_Unnumbered) String() string { return proto.CompactTextString(m) } func (*Interface_Unnumbered) ProtoMessage() {} func (*Interface_Unnumbered) Descriptor() ([]byte, []int) { - return fileDescriptor_8b053108eedee97b, []int{0, 0} + return fileDescriptor_8b053108eedee97b, []int{0, 1} } func (m *Interface_Unnumbered) XXX_Unmarshal(b []byte) error { @@ -775,7 +839,7 @@ func (m *Interface_RxMode) Reset() { *m = Interface_RxMode{} } func (m *Interface_RxMode) String() string { return proto.CompactTextString(m) } func (*Interface_RxMode) ProtoMessage() {} func (*Interface_RxMode) Descriptor() ([]byte, []int) { - return fileDescriptor_8b053108eedee97b, []int{0, 1} + return fileDescriptor_8b053108eedee97b, []int{0, 2} } func (m *Interface_RxMode) XXX_Unmarshal(b []byte) error { @@ -834,7 +898,7 @@ func (m *Interface_RxPlacement) Reset() { *m = Interface_RxPlacement{} } func (m *Interface_RxPlacement) String() string { return proto.CompactTextString(m) } func (*Interface_RxPlacement) ProtoMessage() {} func (*Interface_RxPlacement) Descriptor() ([]byte, []int) { - return fileDescriptor_8b053108eedee97b, []int{0, 2} + return fileDescriptor_8b053108eedee97b, []int{0, 3} } func (m *Interface_RxPlacement) XXX_Unmarshal(b []byte) error { @@ -1907,6 +1971,7 @@ func init() { proto.RegisterEnum("ligato.vpp.interfaces.GtpuLink_NextNode", GtpuLink_NextNode_name, GtpuLink_NextNode_value) proto.RegisterEnum("ligato.vpp.interfaces.IPIPLink_Mode", IPIPLink_Mode_name, IPIPLink_Mode_value) proto.RegisterType((*Interface)(nil), "ligato.vpp.interfaces.Interface") + proto.RegisterType((*Interface_IP6ND)(nil), "ligato.vpp.interfaces.Interface.IP6ND") proto.RegisterType((*Interface_Unnumbered)(nil), "ligato.vpp.interfaces.Interface.Unnumbered") proto.RegisterType((*Interface_RxMode)(nil), "ligato.vpp.interfaces.Interface.RxMode") proto.RegisterType((*Interface_RxPlacement)(nil), "ligato.vpp.interfaces.Interface.RxPlacement") @@ -1930,151 +1995,156 @@ func init() { } var fileDescriptor_8b053108eedee97b = []byte{ - // 2329 bytes of a gzipped FileDescriptorProto + // 2410 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0xdd, 0x72, 0xdb, 0xc6, - 0xf5, 0x17, 0x48, 0x4a, 0x04, 0x0f, 0x3f, 0x04, 0xef, 0x3f, 0xc9, 0x1f, 0x51, 0xe2, 0x46, 0x65, - 0x9c, 0x46, 0x93, 0x26, 0x72, 0x45, 0x35, 0x1f, 0x6d, 0x3a, 0x4d, 0x40, 0x11, 0x92, 0x19, 0x53, - 0x20, 0x02, 0x82, 0x4e, 0xdc, 0x49, 0x07, 0x03, 0x11, 0x4b, 0x0a, 0x35, 0x08, 0xc0, 0xc0, 0x52, - 0xa6, 0xf2, 0x12, 0xed, 0xc3, 0xf4, 0xb2, 0xef, 0xd0, 0xe9, 0x1b, 0xf4, 0x01, 0x7a, 0xdd, 0x69, - 0x7b, 0xd5, 0x39, 0xbb, 0x0b, 0x8a, 0x4a, 0x2c, 0xc9, 0xd3, 0x1b, 0x69, 0xf7, 0xb7, 0xe7, 0xb7, - 0x7b, 0x70, 0xf6, 0x7c, 0x2d, 0xe1, 0xbd, 0x28, 0x9c, 0xf9, 0x2c, 0x79, 0x78, 0x91, 0xa6, 0x0f, - 0xc3, 0x98, 0xd1, 0x6c, 0xea, 0x4f, 0x68, 0x7e, 0x35, 0xdc, 0x4f, 0xb3, 0x84, 0x25, 0xe4, 0x75, - 0x21, 0xb6, 0x7f, 0x91, 0xa6, 0xfb, 0x57, 0x62, 0x3b, 0x6f, 0xaf, 0xb3, 0xd3, 0x9c, 0x4e, 0xc4, - 0x5f, 0x41, 0x6a, 0xff, 0xad, 0x09, 0xb5, 0x7e, 0x21, 0x4c, 0x08, 0x54, 0x62, 0x7f, 0x4e, 0x75, - 0x65, 0x57, 0xd9, 0xab, 0x39, 0x7c, 0x4c, 0x7e, 0x05, 0x15, 0x76, 0x99, 0x52, 0xbd, 0xb4, 0xab, - 0xec, 0xb5, 0x3a, 0xef, 0xed, 0xbf, 0xf4, 0x94, 0xfd, 0xd5, 0x1e, 0xfb, 0xee, 0x65, 0x4a, 0x1d, - 0x4e, 0x21, 0x3a, 0x54, 0x69, 0xec, 0x9f, 0x45, 0x34, 0xd0, 0xcb, 0xbb, 0xca, 0x9e, 0xea, 0x14, - 0x53, 0xf2, 0x53, 0x68, 0xa4, 0xe7, 0x97, 0xb9, 0xe7, 0x07, 0x41, 0x46, 0xf3, 0x5c, 0xaf, 0xf0, - 0x03, 0xeb, 0x88, 0x19, 0x02, 0x42, 0x91, 0x30, 0x2d, 0x04, 0x68, 0xae, 0x6f, 0xee, 0x96, 0x51, - 0x24, 0x4c, 0x8d, 0x02, 0x22, 0x1a, 0x94, 0x2f, 0xb2, 0xa9, 0xbe, 0xb5, 0xab, 0xec, 0x35, 0x1d, - 0x1c, 0x92, 0x9f, 0xc1, 0x76, 0x4e, 0x99, 0x17, 0x9c, 0x4f, 0x52, 0x6f, 0x12, 0x85, 0x34, 0x66, - 0x7a, 0x95, 0x9f, 0xdc, 0xcc, 0x29, 0xeb, 0x9d, 0x4f, 0xd2, 0x23, 0x0e, 0x22, 0x73, 0xce, 0x16, - 0xba, 0x2a, 0x98, 0x73, 0xb6, 0x20, 0x8f, 0x01, 0x16, 0x71, 0xbc, 0x98, 0x9f, 0xd1, 0x8c, 0x06, - 0x7a, 0x6d, 0x57, 0xd9, 0xab, 0x77, 0x7e, 0x7e, 0xe7, 0xc7, 0x8e, 0x57, 0x14, 0x67, 0x8d, 0x4e, - 0xba, 0xa0, 0x66, 0x4b, 0x6f, 0x9e, 0x04, 0x34, 0xd7, 0x1b, 0xbb, 0xe5, 0xbd, 0x7a, 0xe7, 0xfd, - 0x3b, 0xb7, 0x72, 0x96, 0xa7, 0x49, 0x40, 0x9d, 0x6a, 0xc6, 0xff, 0xe7, 0xe4, 0x6b, 0x68, 0x66, - 0x4b, 0x2f, 0x8d, 0xfc, 0x09, 0x9d, 0xd3, 0x98, 0xe5, 0x7a, 0x93, 0x6f, 0xf4, 0xe1, 0x2b, 0x6c, - 0x64, 0x17, 0x24, 0xa7, 0x91, 0x5d, 0x4d, 0x72, 0xf2, 0x29, 0x94, 0xf3, 0xc5, 0x99, 0x1e, 0xf0, - 0x8f, 0x7b, 0xf7, 0x86, 0x8d, 0x46, 0x8b, 0xb3, 0xd5, 0x5e, 0x8f, 0x36, 0x1c, 0x64, 0x90, 0xcf, - 0x60, 0x73, 0x4e, 0xe7, 0xe1, 0x54, 0xa7, 0x9c, 0xba, 0x7b, 0x03, 0xf5, 0x14, 0x65, 0x06, 0x61, - 0xfc, 0xec, 0xd1, 0x86, 0x23, 0x08, 0xc4, 0x00, 0xd5, 0x9f, 0xa6, 0xfe, 0xe4, 0x19, 0x65, 0xfa, - 0xf4, 0xd6, 0x73, 0x0d, 0x29, 0x26, 0xf9, 0x2b, 0x1a, 0xe9, 0x40, 0x99, 0xf9, 0xa9, 0x3e, 0xe3, - 0xec, 0x9f, 0xdc, 0xc0, 0x76, 0xfd, 0x54, 0x12, 0x51, 0x18, 0x15, 0xbe, 0x58, 0x46, 0x7e, 0xac, - 0x9f, 0xdf, 0xaa, 0xf0, 0x13, 0x94, 0x29, 0x14, 0xe6, 0x04, 0xf2, 0x1b, 0xd8, 0xe4, 0xf1, 0xa1, - 0x87, 0xb7, 0x32, 0xfb, 0xf6, 0x88, 0x4e, 0x90, 0xd9, 0x2d, 0xe9, 0x0a, 0xb2, 0x39, 0x89, 0x7c, - 0x01, 0xea, 0xc5, 0x7c, 0xe9, 0xc5, 0x94, 0x1d, 0xea, 0x7f, 0xe0, 0x1b, 0xb4, 0x6f, 0x3a, 0x7a, - 0xbe, 0xb4, 0x28, 0x3b, 0x94, 0x87, 0x57, 0x2f, 0xc4, 0x94, 0x7c, 0x0c, 0x95, 0xb3, 0x24, 0x0e, - 0xf4, 0x67, 0x9c, 0xfc, 0xce, 0x0d, 0xe4, 0x6e, 0x12, 0x07, 0x92, 0xc9, 0xc5, 0xd1, 0x46, 0xb3, - 0x8c, 0xea, 0xd1, 0xad, 0x36, 0x3a, 0xc9, 0x68, 0x61, 0xa3, 0x59, 0x46, 0xf1, 0xa8, 0x19, 0x4b, - 0x17, 0xfa, 0xfc, 0xd6, 0xa3, 0x4e, 0x58, 0xba, 0x28, 0x8e, 0x42, 0x71, 0xa4, 0x85, 0x69, 0x98, - 0xea, 0xf1, 0xad, 0xb4, 0xbe, 0xdd, 0xb7, 0x0b, 0x1a, 0x8a, 0xef, 0x7c, 0x06, 0x70, 0x15, 0x2c, - 0xe4, 0x03, 0xb8, 0xb7, 0x12, 0xf6, 0x5e, 0x84, 0xec, 0xdc, 0x0b, 0x53, 0x99, 0x75, 0xb6, 0x57, - 0x0b, 0xdf, 0x84, 0xec, 0xbc, 0x9f, 0xee, 0xfc, 0x55, 0x81, 0x2d, 0x11, 0x1c, 0xe4, 0x35, 0xd8, - 0x7c, 0xbe, 0xa0, 0x0b, 0x91, 0xa0, 0x9a, 0x8e, 0x98, 0x90, 0x2f, 0xa1, 0x82, 0xa1, 0x26, 0x33, - 0xd4, 0x87, 0xaf, 0x18, 0x69, 0x32, 0x51, 0x21, 0x13, 0x73, 0x4d, 0x40, 0xa7, 0xfe, 0x22, 0x62, - 0x3c, 0x68, 0x65, 0xb6, 0xaa, 0x4b, 0x0c, 0xa5, 0xdb, 0x5f, 0x41, 0x05, 0x09, 0xa4, 0x0e, 0xd5, - 0xb1, 0xf5, 0xd8, 0x1a, 0x7e, 0x63, 0x69, 0x1b, 0x38, 0xb1, 0x87, 0x83, 0x41, 0xdf, 0x3a, 0xd1, - 0x14, 0x82, 0x99, 0xd4, 0x72, 0x4d, 0xc7, 0x19, 0xdb, 0xae, 0x56, 0x22, 0x0d, 0x50, 0x8d, 0x9e, - 0x61, 0xbb, 0xfd, 0x27, 0xa6, 0x56, 0x46, 0xc9, 0x9e, 0x79, 0x6c, 0x8c, 0x07, 0xae, 0x56, 0xd9, - 0xf9, 0x0e, 0xea, 0x6b, 0x41, 0x7a, 0xc3, 0x57, 0xbd, 0x01, 0x5b, 0x2f, 0x92, 0xec, 0x19, 0xcd, - 0xf8, 0x77, 0x35, 0x1d, 0x39, 0x23, 0xef, 0x40, 0x7d, 0xee, 0x87, 0xb1, 0xc7, 0xce, 0x33, 0xea, - 0x17, 0x89, 0x15, 0x10, 0x72, 0x39, 0xd2, 0xfe, 0xa7, 0x22, 0x55, 0x25, 0xd0, 0x1a, 0x5b, 0x3d, - 0xf3, 0xb8, 0x6f, 0x99, 0x3d, 0xcf, 0x7d, 0x6a, 0x9b, 0xda, 0x06, 0xb9, 0x07, 0xcd, 0xd1, 0xb8, - 0xeb, 0x71, 0x45, 0x8f, 0x8d, 0x23, 0x53, 0x53, 0xc8, 0xeb, 0x70, 0x6f, 0x34, 0x3c, 0x76, 0xbf, - 0x31, 0x1c, 0xd3, 0x1b, 0x0c, 0x87, 0x76, 0xd7, 0x38, 0x7a, 0xac, 0x95, 0x88, 0x0a, 0x95, 0x9e, - 0xdd, 0x7b, 0xac, 0x95, 0x49, 0x0d, 0x36, 0x4f, 0xcd, 0xd3, 0xfe, 0xb1, 0x56, 0x21, 0x55, 0x28, - 0xbb, 0x86, 0xad, 0x6d, 0xe2, 0xc7, 0x1a, 0xc7, 0x9e, 0x6d, 0x1c, 0x3d, 0x36, 0x5d, 0x6d, 0x8b, - 0x68, 0xd0, 0x78, 0xf2, 0xed, 0xc0, 0xb0, 0x3c, 0x77, 0x6c, 0x59, 0xe6, 0x40, 0xab, 0x92, 0xd7, - 0xa0, 0xd1, 0xb7, 0x47, 0xe6, 0x51, 0x81, 0xa8, 0x3b, 0x25, 0x95, 0x9f, 0xf5, 0xe4, 0xf4, 0x5b, - 0xcb, 0x74, 0x0f, 0xd7, 0x54, 0xa8, 0xa1, 0xa6, 0xdd, 0xa1, 0xd5, 0x5b, 0xc3, 0x80, 0xb4, 0x00, - 0x4e, 0x1c, 0xb3, 0xa0, 0xd7, 0xc9, 0x36, 0xd4, 0x4f, 0x5c, 0x7b, 0x5c, 0x00, 0x0d, 0x04, 0xd0, - 0xcb, 0x0a, 0xa0, 0xd9, 0xdd, 0x82, 0x4a, 0x14, 0xc6, 0xcf, 0xda, 0xff, 0x29, 0x41, 0x63, 0x3d, - 0x8b, 0xa1, 0xc9, 0x52, 0x3f, 0xa3, 0x31, 0xf3, 0xd6, 0xaa, 0x1b, 0x08, 0xc8, 0xc2, 0x1a, 0xf7, - 0x3a, 0x6c, 0xe5, 0x8b, 0x33, 0x2f, 0x0c, 0xa4, 0xad, 0x37, 0xf3, 0xc5, 0x59, 0x3f, 0x20, 0x4f, - 0xa1, 0xc9, 0xfc, 0x99, 0x97, 0xbd, 0xf0, 0x92, 0x94, 0x85, 0x49, 0xcc, 0x8d, 0xdd, 0xea, 0x7c, - 0xfc, 0x0a, 0x99, 0x73, 0xdf, 0xf5, 0x67, 0x0e, 0x7d, 0x91, 0x85, 0x8c, 0x0e, 0x39, 0x37, 0x77, - 0xea, 0xcc, 0x9f, 0x39, 0x2f, 0xc4, 0x8c, 0xdc, 0x07, 0x48, 0x17, 0xf9, 0xb9, 0x17, 0x24, 0xec, - 0xe0, 0x39, 0x2f, 0x7f, 0xaa, 0x53, 0x43, 0xa4, 0x87, 0x00, 0x16, 0x62, 0xe6, 0xcf, 0x0e, 0xf4, - 0x4d, 0xae, 0x0e, 0x1f, 0x4b, 0xac, 0x23, 0xcb, 0x1d, 0x1f, 0xb7, 0xff, 0xa8, 0xc0, 0xbd, 0x1f, - 0x9d, 0x84, 0xae, 0xd7, 0xeb, 0x8f, 0x8c, 0xee, 0xc0, 0xec, 0x69, 0x1b, 0x78, 0x7d, 0xf6, 0x78, - 0xf4, 0xe8, 0x40, 0x53, 0x8a, 0x61, 0x47, 0x5c, 0xaf, 0x3d, 0xb4, 0x0f, 0xb4, 0xb2, 0x1c, 0x75, - 0xb4, 0x0a, 0x5a, 0xd4, 0x75, 0x0c, 0x6b, 0x34, 0x30, 0x5c, 0xf3, 0xe0, 0x40, 0xdb, 0xbc, 0x0e, - 0x74, 0xb4, 0xad, 0x6b, 0x40, 0xe7, 0x40, 0xab, 0x5e, 0x07, 0x3a, 0x9a, 0xda, 0xfe, 0x7b, 0x09, - 0x6a, 0xab, 0x3a, 0x40, 0x7e, 0x2b, 0x43, 0x53, 0xe1, 0x86, 0xfb, 0xe0, 0xae, 0xba, 0x21, 0x46, - 0xbc, 0x0e, 0x8a, 0xc0, 0x7c, 0x03, 0xb6, 0xe6, 0x7e, 0xce, 0x64, 0x10, 0xa8, 0x8e, 0x9c, 0x91, - 0x16, 0x94, 0x42, 0xe1, 0xfb, 0x4d, 0xa7, 0x14, 0x06, 0xe4, 0x7d, 0xd8, 0xce, 0x13, 0xac, 0x16, - 0xde, 0x34, 0x8c, 0x28, 0xbf, 0x65, 0xd1, 0x52, 0xb4, 0x04, 0x7c, 0x2c, 0x51, 0xdc, 0x30, 0xa7, - 0x93, 0x8c, 0x32, 0x6e, 0xda, 0x9a, 0x23, 0x67, 0xe4, 0x2d, 0xa8, 0x65, 0x61, 0x3c, 0xf3, 0xf2, - 0xf0, 0x7b, 0x2a, 0x2d, 0xac, 0x22, 0x30, 0x0a, 0xbf, 0xe7, 0xfe, 0x73, 0xb6, 0x98, 0x4e, 0x69, - 0x26, 0x96, 0xab, 0x7c, 0x19, 0x04, 0xc4, 0x05, 0x90, 0xbd, 0xf4, 0x78, 0xdc, 0xe6, 0xb2, 0xa9, - 0x50, 0xb3, 0xe5, 0xd7, 0x7c, 0x8e, 0x8b, 0x6c, 0xb5, 0x58, 0x13, 0x8b, 0x4c, 0x2e, 0xb6, 0x3b, - 0xd2, 0x5a, 0x3c, 0xbd, 0x35, 0x40, 0x35, 0xdd, 0x47, 0xa6, 0x63, 0x99, 0xae, 0xb6, 0x41, 0xb6, - 0xa0, 0xd4, 0xb7, 0x35, 0x05, 0x4d, 0x6c, 0x8f, 0x2d, 0xd7, 0xeb, 0x5b, 0x5f, 0x99, 0x47, 0xae, - 0x56, 0x6a, 0xff, 0xa3, 0x04, 0xb5, 0x55, 0xe5, 0x42, 0xe5, 0xf2, 0x6c, 0xb2, 0xea, 0xa4, 0xa4, - 0x73, 0xe7, 0xd9, 0xa4, 0x68, 0xa4, 0xde, 0x81, 0x7a, 0x90, 0xb3, 0x95, 0x40, 0x49, 0x08, 0x04, - 0x39, 0x2b, 0x04, 0xb0, 0x8d, 0x8a, 0x43, 0x69, 0x4d, 0x1c, 0x92, 0xb7, 0xa1, 0x36, 0x5f, 0x44, - 0x2c, 0x9c, 0xf8, 0x39, 0x93, 0x86, 0xbc, 0x02, 0xc8, 0x27, 0x50, 0x9e, 0xa5, 0x94, 0x1b, 0xb0, - 0xde, 0x79, 0x70, 0x57, 0x69, 0xdd, 0x3f, 0x49, 0xa9, 0x83, 0x84, 0x9d, 0x3f, 0x2b, 0x50, 0x3e, - 0x49, 0x29, 0xd9, 0xc5, 0x6c, 0x3b, 0xf1, 0x53, 0xef, 0x22, 0x9b, 0x62, 0xcc, 0x89, 0xb4, 0x07, - 0x1c, 0x7b, 0x92, 0x4d, 0xfb, 0x01, 0xe9, 0x83, 0xca, 0xdb, 0xd3, 0x49, 0x12, 0xc9, 0xac, 0xfe, - 0xd1, 0xab, 0x1c, 0xb3, 0x6f, 0x4b, 0x92, 0xb3, 0xa2, 0xb7, 0xbf, 0x04, 0xb5, 0x40, 0xaf, 0xe7, - 0xee, 0x2a, 0x94, 0xfb, 0xf6, 0x2f, 0x35, 0x45, 0x0c, 0x3e, 0x11, 0x19, 0x7b, 0x65, 0xfe, 0x32, - 0xc2, 0xd6, 0xe8, 0x91, 0x56, 0x69, 0xff, 0x1e, 0x1a, 0xeb, 0xbd, 0x09, 0x79, 0x00, 0x8d, 0xf3, - 0x24, 0x67, 0x5e, 0x38, 0x5d, 0x4b, 0x27, 0xd8, 0x06, 0x38, 0x80, 0x78, 0x7f, 0xca, 0x53, 0xca, - 0xfb, 0xb0, 0x1d, 0x85, 0xf1, 0x62, 0xe9, 0xad, 0x94, 0x95, 0x96, 0x6f, 0x71, 0x78, 0x95, 0x28, - 0x30, 0x5d, 0x57, 0x65, 0xf7, 0x82, 0x0d, 0xf3, 0x05, 0xcd, 0x72, 0x4c, 0x35, 0xc2, 0x28, 0xc5, - 0x14, 0x6d, 0x76, 0xed, 0x50, 0x79, 0x8b, 0xd7, 0x0f, 0x64, 0x89, 0x37, 0x0f, 0x27, 0x59, 0x92, - 0xd3, 0xec, 0x22, 0x9c, 0x88, 0x32, 0x56, 0x73, 0x5a, 0x2c, 0x39, 0x5d, 0x43, 0x71, 0xab, 0x6c, - 0xe9, 0x5d, 0x79, 0x7b, 0x45, 0x98, 0x3f, 0x5b, 0x3a, 0x85, 0xbf, 0xef, 0x42, 0x83, 0xad, 0x4b, - 0x88, 0x2c, 0x04, 0xec, 0x4a, 0xe2, 0x3e, 0x80, 0x68, 0xe5, 0xbd, 0x59, 0x9e, 0xf0, 0x78, 0x51, - 0x9d, 0x9a, 0x40, 0x4e, 0xf2, 0x84, 0xbc, 0x0b, 0x4d, 0xb9, 0xcc, 0x16, 0x71, 0x4c, 0x23, 0xd9, - 0x84, 0x37, 0x04, 0xe8, 0x72, 0xac, 0xfd, 0xef, 0x32, 0xd4, 0x56, 0x6d, 0x14, 0x3a, 0x21, 0xcd, - 0x63, 0x19, 0xe6, 0x38, 0x44, 0xbf, 0xf5, 0x63, 0x16, 0x7a, 0x19, 0x4d, 0x23, 0xff, 0xb2, 0x28, - 0x74, 0x08, 0x39, 0x1c, 0x21, 0x6f, 0x82, 0x1a, 0x25, 0x13, 0x3f, 0xc2, 0xde, 0x41, 0x38, 0x69, - 0x95, 0xcf, 0xfb, 0x29, 0x0f, 0x48, 0x3a, 0x4f, 0x18, 0xc5, 0x35, 0x11, 0xe9, 0xaa, 0x00, 0xc4, - 0xa2, 0xe0, 0xe5, 0x69, 0x58, 0xc4, 0x3a, 0x07, 0x46, 0x69, 0x88, 0x5f, 0x26, 0x99, 0xb8, 0x2a, - 0x42, 0x5d, 0xee, 0x85, 0xcb, 0xbf, 0x06, 0x98, 0x64, 0x97, 0x29, 0x4b, 0x3c, 0x3f, 0x9a, 0xf1, - 0x50, 0x6f, 0x75, 0xde, 0xba, 0xe6, 0x9b, 0xfc, 0x71, 0x75, 0xc4, 0x65, 0x8c, 0x68, 0xe6, 0xd4, - 0x26, 0xc5, 0x90, 0xec, 0x81, 0x26, 0xce, 0x95, 0x3b, 0x3c, 0xa3, 0x97, 0x3c, 0x1f, 0xa0, 0x4f, - 0x20, 0x2e, 0x48, 0x8f, 0xe9, 0x25, 0xb6, 0x47, 0x52, 0x89, 0x35, 0x51, 0x10, 0xed, 0x91, 0x58, - 0xb8, 0x92, 0xfd, 0x14, 0x6a, 0xe8, 0x62, 0x33, 0xae, 0x50, 0x9d, 0x2b, 0xb4, 0xf3, 0x63, 0x85, - 0xd0, 0xdf, 0x66, 0xa8, 0x8f, 0x1a, 0xca, 0x11, 0xbe, 0x95, 0xa4, 0xf9, 0x38, 0x1d, 0x8f, 0x68, - 0xf0, 0x23, 0x9a, 0xc2, 0x8a, 0x88, 0xe2, 0x01, 0x7b, 0xa0, 0x15, 0xb6, 0x5c, 0x09, 0x36, 0x85, - 0xda, 0xd2, 0xa4, 0x6b, 0x92, 0xf2, 0xda, 0x17, 0x41, 0xea, 0xd1, 0x78, 0xe2, 0xa7, 0x7a, 0x8b, - 0x5f, 0x5b, 0x4b, 0xe0, 0xe3, 0x20, 0x35, 0x11, 0x6d, 0x07, 0x50, 0x5f, 0x6b, 0x80, 0xf1, 0xaa, - 0x25, 0x91, 0x46, 0xc9, 0x4c, 0x3a, 0x81, 0xf4, 0x30, 0x33, 0x4a, 0x66, 0x78, 0xd5, 0xd9, 0xf2, - 0xb9, 0xf0, 0x46, 0x91, 0xa7, 0xaa, 0xd9, 0xf2, 0x39, 0x77, 0xc5, 0x37, 0x41, 0x65, 0xc5, 0x92, - 0x70, 0xe5, 0x2a, 0x13, 0x4b, 0xe8, 0x61, 0x6a, 0xd1, 0x2a, 0xcb, 0x92, 0xa1, 0xac, 0x4a, 0xc6, - 0x67, 0xb2, 0x34, 0x89, 0x9a, 0xfe, 0xe0, 0x8e, 0x4e, 0x7b, 0x7f, 0xad, 0x28, 0x7d, 0x0e, 0xa5, - 0xe8, 0x8c, 0x9f, 0xd5, 0xba, 0xf1, 0x89, 0xb8, 0xe2, 0x0d, 0x12, 0x3f, 0xe8, 0xfa, 0x91, 0x1f, - 0x4f, 0xa8, 0x53, 0x8a, 0xce, 0xc8, 0x77, 0x70, 0x0f, 0x3b, 0x76, 0x1a, 0x5c, 0x25, 0x86, 0xe2, - 0x8d, 0xf8, 0xf0, 0xae, 0xbd, 0xba, 0x9c, 0xb8, 0x4a, 0x1d, 0x8e, 0x76, 0x76, 0x1d, 0xc8, 0x77, - 0x22, 0xd8, 0xfe, 0x81, 0xd0, 0x4b, 0xdf, 0xf4, 0xf7, 0x01, 0xc2, 0xdc, 0x4b, 0xfd, 0x3c, 0x0f, - 0x2f, 0xa8, 0x34, 0x77, 0x2d, 0xcc, 0x6d, 0x01, 0xa0, 0x67, 0x84, 0xb9, 0x17, 0x25, 0xf1, 0xcc, - 0x63, 0xe1, 0x9c, 0x26, 0x0b, 0x26, 0xa3, 0xaf, 0x19, 0xe6, 0x83, 0x24, 0x9e, 0xb9, 0x02, 0x6c, - 0x3f, 0x85, 0x0a, 0xaf, 0x5b, 0xd7, 0xf2, 0xea, 0x36, 0xd4, 0x9d, 0xe1, 0xd8, 0xea, 0x79, 0xce, - 0xb0, 0xdb, 0xb7, 0x34, 0x05, 0x5b, 0x4e, 0xe3, 0x08, 0xdb, 0x60, 0x0f, 0x3b, 0xcb, 0xb1, 0xad, - 0x95, 0x30, 0xb7, 0x7e, 0x3b, 0x74, 0xb4, 0x32, 0xb6, 0x91, 0x5d, 0x67, 0x68, 0xf4, 0x8e, 0x8c, - 0x91, 0xab, 0x55, 0xb0, 0x15, 0x19, 0x18, 0x47, 0xb6, 0xb6, 0xd9, 0xfe, 0x02, 0xea, 0x6b, 0x96, - 0xc3, 0x5a, 0x38, 0xe8, 0x88, 0xa4, 0x3d, 0x38, 0x94, 0x49, 0x7b, 0xd0, 0x39, 0xd4, 0x4a, 0xb8, - 0xe2, 0xe0, 0x4e, 0x5b, 0x50, 0xea, 0x1e, 0x69, 0x15, 0xfc, 0x6f, 0x74, 0xb5, 0xcd, 0xf6, 0xbf, - 0x14, 0xa8, 0xca, 0x07, 0x0f, 0xe9, 0x41, 0x5d, 0xe4, 0x21, 0x8f, 0xff, 0x92, 0x21, 0x9a, 0x91, - 0x77, 0x6f, 0x7f, 0x25, 0x89, 0xe7, 0x01, 0x08, 0x1e, 0x6f, 0xa7, 0xdf, 0x04, 0xb5, 0x28, 0xb4, - 0x32, 0xfd, 0x56, 0x65, 0x95, 0xc5, 0xa5, 0xa2, 0xc4, 0xca, 0xa4, 0x5b, 0x95, 0xf5, 0x15, 0x73, - 0x69, 0xb2, 0x60, 0x34, 0xf3, 0xa6, 0x21, 0x6f, 0x30, 0x65, 0xb6, 0xe5, 0xd8, 0x71, 0x88, 0x5d, - 0xe6, 0x7d, 0x80, 0x9c, 0xe6, 0x98, 0xe5, 0x71, 0x5d, 0xe4, 0xda, 0x9a, 0x44, 0xfa, 0x41, 0xfb, - 0x17, 0x2f, 0x7b, 0x78, 0xa0, 0x3d, 0x0e, 0x85, 0x19, 0x5c, 0xb3, 0xab, 0x95, 0x08, 0xc0, 0x96, - 0xe9, 0x8c, 0x6c, 0xc3, 0xd2, 0xca, 0xed, 0x3f, 0x95, 0x40, 0x2d, 0x9e, 0x6d, 0xd7, 0xb4, 0x56, - 0x6e, 0xd6, 0xba, 0x74, 0x5d, 0xeb, 0x6b, 0x0d, 0x40, 0xf9, 0x87, 0x0d, 0x00, 0x76, 0xa2, 0x74, - 0xf5, 0x2d, 0x7c, 0x8c, 0xdf, 0xc9, 0x03, 0xbe, 0x28, 0xea, 0xb2, 0x66, 0x70, 0x4c, 0x14, 0xf5, - 0x13, 0x10, 0x25, 0xde, 0x8b, 0xe9, 0x92, 0xf1, 0xbc, 0xdb, 0xea, 0xec, 0xdd, 0xf1, 0xea, 0xdc, - 0xb7, 0xe8, 0x92, 0x59, 0x18, 0x7a, 0x35, 0xce, 0xc5, 0x69, 0xfb, 0x00, 0xd4, 0x02, 0x5e, 0x7f, - 0x57, 0x6d, 0x48, 0x2f, 0x51, 0x8a, 0xd2, 0x5e, 0x2a, 0x4a, 0x7b, 0xb9, 0xfd, 0x17, 0x05, 0xd4, - 0xe2, 0x49, 0x4a, 0xcc, 0x95, 0x3b, 0xac, 0xf5, 0xa6, 0x0f, 0xee, 0x78, 0xc8, 0x8a, 0x04, 0x20, - 0xfd, 0x81, 0x7b, 0xfd, 0xff, 0xe4, 0x0f, 0xed, 0x43, 0x19, 0x33, 0x04, 0x5a, 0xf6, 0xb0, 0x6f, - 0xb9, 0x9e, 0x3b, 0xf4, 0xf8, 0x40, 0xdb, 0x20, 0xff, 0x0f, 0xff, 0xb7, 0xc2, 0x4e, 0xc7, 0x03, - 0xb7, 0x2f, 0x16, 0x94, 0xee, 0xf1, 0xef, 0x7a, 0xb3, 0xa4, 0x50, 0x30, 0xe4, 0xbf, 0xe5, 0x7d, - 0xe4, 0xcf, 0x68, 0xcc, 0x1e, 0x5e, 0x1c, 0x3e, 0xe4, 0xad, 0xce, 0xc3, 0x97, 0xfe, 0x46, 0xf8, - 0xf9, 0x45, 0x9a, 0xae, 0xe5, 0x99, 0xb3, 0x2d, 0x2e, 0x7b, 0xf8, 0xdf, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x9c, 0x59, 0x95, 0xec, 0x52, 0x14, 0x00, 0x00, + 0x15, 0x16, 0xff, 0xc1, 0xc3, 0x1f, 0xc3, 0xdb, 0x24, 0x45, 0x94, 0xb8, 0x51, 0x19, 0x27, 0xd1, + 0xa4, 0x89, 0x5c, 0x51, 0x89, 0x93, 0x36, 0x6d, 0x13, 0x52, 0x84, 0x64, 0xc4, 0x14, 0x88, 0x80, + 0xa0, 0x93, 0x74, 0xd2, 0xc1, 0x40, 0xc4, 0x92, 0x42, 0x0d, 0x02, 0x30, 0xb0, 0x94, 0xa9, 0xbc, + 0x44, 0xfb, 0x30, 0xbd, 0xec, 0x3b, 0xf4, 0x15, 0xfa, 0x00, 0xbd, 0xee, 0xb4, 0xbd, 0xe8, 0x74, + 0xce, 0xee, 0x82, 0xa2, 0x12, 0x4b, 0xf2, 0xf4, 0x46, 0xda, 0xfd, 0xce, 0xf9, 0xf6, 0xe7, 0xe0, + 0xfc, 0x2d, 0xe1, 0x9d, 0x30, 0x98, 0x7b, 0x2c, 0x7e, 0x70, 0x9e, 0x24, 0x0f, 0x82, 0x88, 0xd1, + 0x74, 0xe6, 0x4d, 0x69, 0x76, 0x39, 0xdc, 0x4b, 0xd2, 0x98, 0xc5, 0xe4, 0x55, 0xa1, 0xb6, 0x77, + 0x9e, 0x24, 0x7b, 0x97, 0x6a, 0xdb, 0x6f, 0x6e, 0xb2, 0x93, 0x8c, 0x4e, 0xc5, 0x5f, 0x41, 0xea, + 0xfc, 0xb7, 0x0d, 0x75, 0x23, 0x57, 0x26, 0x04, 0xca, 0x91, 0xb7, 0xa0, 0x5a, 0x61, 0xa7, 0xb0, + 0x5b, 0xb7, 0xf9, 0x98, 0xfc, 0x0a, 0xca, 0xec, 0x22, 0xa1, 0x5a, 0x71, 0xa7, 0xb0, 0xdb, 0xee, + 0xbe, 0xb3, 0xf7, 0xc2, 0x5d, 0xf6, 0xd6, 0x6b, 0xec, 0x39, 0x17, 0x09, 0xb5, 0x39, 0x85, 0x68, + 0x50, 0xa3, 0x91, 0x77, 0x1a, 0x52, 0x5f, 0x2b, 0xed, 0x14, 0x76, 0x15, 0x3b, 0x9f, 0x92, 0x9f, + 0x43, 0x33, 0x39, 0xbb, 0xc8, 0x5c, 0xcf, 0xf7, 0x53, 0x9a, 0x65, 0x5a, 0x99, 0x6f, 0xd8, 0x40, + 0xac, 0x27, 0x20, 0x54, 0x09, 0x92, 0x5c, 0x81, 0x66, 0x5a, 0x65, 0xa7, 0x84, 0x2a, 0x41, 0xd2, + 0xcb, 0x21, 0xa2, 0x42, 0xe9, 0x3c, 0x9d, 0x69, 0xd5, 0x9d, 0xc2, 0x6e, 0xcb, 0xc6, 0x21, 0x79, + 0x17, 0xee, 0x64, 0x94, 0xb9, 0xfe, 0xd9, 0x34, 0x71, 0xa7, 0x61, 0x40, 0x23, 0xa6, 0xd5, 0xf8, + 0xce, 0xad, 0x8c, 0xb2, 0xc1, 0xd9, 0x34, 0x39, 0xe4, 0x20, 0xf9, 0x2d, 0x54, 0x83, 0xe4, 0xa1, + 0x1b, 0xf9, 0x5a, 0x7b, 0xa7, 0xb0, 0xdb, 0xe8, 0xbe, 0x7b, 0xeb, 0xb5, 0x0c, 0xeb, 0xa1, 0x39, + 0xb0, 0x2b, 0x41, 0xf2, 0xd0, 0xf4, 0x71, 0xe3, 0x05, 0x5b, 0x6a, 0x8a, 0xd8, 0x78, 0xc1, 0x96, + 0xe4, 0x31, 0xc0, 0x32, 0x8a, 0x96, 0x8b, 0x53, 0x9a, 0x52, 0x5f, 0xab, 0xf3, 0x45, 0x7f, 0x71, + 0xeb, 0xa2, 0x93, 0x35, 0xc5, 0xde, 0xa0, 0x93, 0x3e, 0x28, 0xe9, 0xca, 0x5d, 0xc4, 0x3e, 0xcd, + 0xb4, 0xe6, 0x4e, 0x69, 0xb7, 0xd1, 0x7d, 0xef, 0xd6, 0xa5, 0xec, 0xd5, 0x49, 0xec, 0x53, 0xbb, + 0x96, 0xf2, 0xff, 0x19, 0xf9, 0x0a, 0x5a, 0xe9, 0xca, 0x4d, 0x42, 0x6f, 0x4a, 0x17, 0x34, 0x62, + 0x99, 0xd6, 0xe2, 0x0b, 0x7d, 0xf0, 0x12, 0x0b, 0x59, 0x39, 0xc9, 0x6e, 0xa6, 0x97, 0x93, 0x8c, + 0x7c, 0x02, 0xa5, 0x6c, 0x79, 0xaa, 0xf9, 0xfc, 0x72, 0x6f, 0x5f, 0xb3, 0xd0, 0x78, 0x79, 0xba, + 0x5e, 0xeb, 0xd1, 0x96, 0x8d, 0x0c, 0xf2, 0x29, 0x54, 0x16, 0x74, 0x11, 0xcc, 0x34, 0xca, 0xa9, + 0x3b, 0xd7, 0x50, 0x4f, 0x50, 0x67, 0x18, 0x44, 0x4f, 0x1f, 0x6d, 0xd9, 0x82, 0x40, 0x7a, 0xa0, + 0x78, 0xb3, 0xc4, 0x9b, 0x3e, 0xa5, 0x4c, 0x9b, 0xdd, 0xb8, 0x6f, 0x4f, 0xaa, 0x49, 0xfe, 0x9a, + 0x46, 0xba, 0x50, 0x62, 0x5e, 0xa2, 0xcd, 0x39, 0xfb, 0x67, 0xd7, 0xb0, 0x1d, 0x2f, 0x91, 0x44, + 0x54, 0xc6, 0x03, 0x9f, 0xaf, 0x42, 0x2f, 0xd2, 0xce, 0x6e, 0x3c, 0xf0, 0x13, 0xd4, 0xc9, 0x0f, + 0xcc, 0x09, 0xe4, 0x37, 0x50, 0xe1, 0xe1, 0xa5, 0x05, 0x37, 0x32, 0x0d, 0x6b, 0x4c, 0xa7, 0xc8, + 0xec, 0x17, 0xb5, 0x02, 0xb2, 0x39, 0x89, 0x7c, 0x0e, 0xca, 0xf9, 0x62, 0xe5, 0x46, 0x94, 0x1d, + 0x68, 0x7f, 0xe4, 0x0b, 0x74, 0xae, 0xdb, 0x7a, 0xb1, 0x32, 0x29, 0x3b, 0x90, 0x9b, 0xd7, 0xce, + 0xc5, 0x94, 0x7c, 0x0c, 0xe5, 0xd3, 0x38, 0xf2, 0xb5, 0xa7, 0x9c, 0xfc, 0xd6, 0x35, 0xe4, 0x7e, + 0x1c, 0xf9, 0x92, 0xc9, 0xd5, 0xd1, 0x46, 0xf3, 0x94, 0x6a, 0xe1, 0x8d, 0x36, 0x3a, 0x4e, 0x69, + 0x6e, 0xa3, 0x79, 0x4a, 0x71, 0xab, 0x39, 0x4b, 0x96, 0xda, 0xe2, 0xc6, 0xad, 0x8e, 0x59, 0xb2, + 0xcc, 0xb7, 0x42, 0x75, 0xa4, 0x05, 0x49, 0x90, 0x68, 0xd1, 0x8d, 0x34, 0xc3, 0x32, 0xac, 0x9c, + 0x86, 0xea, 0xdb, 0x21, 0x54, 0x78, 0x04, 0x92, 0x0f, 0x81, 0xc8, 0x9c, 0xe0, 0x7a, 0x4b, 0x16, + 0x4f, 0xe3, 0x68, 0x16, 0xcc, 0x79, 0xc2, 0x52, 0xec, 0xbb, 0x52, 0xd2, 0x5b, 0x0b, 0xc8, 0x47, + 0xf0, 0x5a, 0x10, 0x65, 0xcc, 0x0b, 0x43, 0xd7, 0xa7, 0x33, 0x6f, 0x19, 0x32, 0x37, 0x8d, 0x97, + 0x8c, 0x66, 0x3c, 0x9f, 0x29, 0xf6, 0x2b, 0x52, 0x3a, 0x10, 0x42, 0x9b, 0xcb, 0xb6, 0x3f, 0x05, + 0xb8, 0x0c, 0x4d, 0xf2, 0x3e, 0xdc, 0x5d, 0x1f, 0xcd, 0x7d, 0x1e, 0xb0, 0x33, 0x37, 0x48, 0x64, + 0x8a, 0xbc, 0xb3, 0x16, 0x7c, 0x1d, 0xb0, 0x33, 0x23, 0xd9, 0xfe, 0x5b, 0x01, 0xaa, 0x22, 0x14, + 0xc9, 0x2b, 0x50, 0x79, 0xb6, 0xa4, 0x4b, 0x91, 0x4d, 0x5b, 0xb6, 0x98, 0x90, 0x2f, 0xa0, 0x8c, + 0x81, 0x2d, 0xd3, 0xe9, 0x07, 0x2f, 0x19, 0xd7, 0x32, 0xab, 0x22, 0x13, 0x13, 0x63, 0x7e, 0x15, + 0xbe, 0x92, 0x48, 0xad, 0x0d, 0x89, 0xa1, 0x76, 0xe7, 0x4b, 0x28, 0x23, 0x81, 0x34, 0xa0, 0x36, + 0x31, 0x1f, 0x9b, 0xa3, 0xaf, 0x4d, 0x75, 0x0b, 0x27, 0xd6, 0x68, 0x38, 0x34, 0xcc, 0x63, 0xb5, + 0x40, 0x5a, 0x50, 0x37, 0x4c, 0x47, 0xb7, 0xed, 0x89, 0xe5, 0xa8, 0x45, 0xd2, 0x04, 0xa5, 0x37, + 0xe8, 0x59, 0x8e, 0xf1, 0x44, 0x57, 0x4b, 0xa8, 0x39, 0xd0, 0x8f, 0x7a, 0x93, 0xa1, 0xa3, 0x96, + 0xb7, 0xbf, 0x83, 0xc6, 0x46, 0x4a, 0xb8, 0xe6, 0x56, 0xaf, 0x41, 0xf5, 0x79, 0x9c, 0x3e, 0xa5, + 0x29, 0xbf, 0x57, 0xcb, 0x96, 0x33, 0xf2, 0x16, 0x34, 0x16, 0x5e, 0x10, 0xb9, 0xec, 0x2c, 0xa5, + 0x5e, 0x5e, 0x05, 0x00, 0x21, 0x87, 0x23, 0x9d, 0x7f, 0x16, 0xe4, 0x51, 0x09, 0xb4, 0x27, 0xe6, + 0x40, 0x3f, 0x32, 0x4c, 0x7d, 0xe0, 0x3a, 0xdf, 0x5a, 0xba, 0xba, 0x45, 0xee, 0x42, 0x6b, 0x3c, + 0xe9, 0xbb, 0xfc, 0xa0, 0x47, 0xbd, 0x43, 0x5d, 0x2d, 0x90, 0x57, 0xe1, 0xee, 0x78, 0x74, 0xe4, + 0x7c, 0xdd, 0xb3, 0x75, 0x77, 0x38, 0x1a, 0x59, 0xfd, 0xde, 0xe1, 0x63, 0xb5, 0x48, 0x14, 0x28, + 0x0f, 0xac, 0xc1, 0x63, 0xb5, 0x44, 0xea, 0x50, 0x39, 0xd1, 0x4f, 0x8c, 0x23, 0xb5, 0x4c, 0x6a, + 0x50, 0x72, 0x7a, 0x96, 0x5a, 0xc1, 0xcb, 0xf6, 0x8e, 0x5c, 0xab, 0x77, 0xf8, 0x58, 0x77, 0xd4, + 0x2a, 0x51, 0xa1, 0xf9, 0xe4, 0x9b, 0x61, 0xcf, 0x74, 0x9d, 0x89, 0x69, 0xea, 0x43, 0xb5, 0x46, + 0x5e, 0x81, 0xa6, 0x61, 0x8d, 0xf5, 0xc3, 0x1c, 0x51, 0xb6, 0x8b, 0x0a, 0xdf, 0xeb, 0xc9, 0xc9, + 0x37, 0xa6, 0xee, 0x1c, 0x6c, 0x1c, 0xa1, 0x8e, 0x27, 0xed, 0x8f, 0xcc, 0xc1, 0x06, 0x06, 0xa4, + 0x0d, 0x70, 0x6c, 0xeb, 0x39, 0xbd, 0x41, 0xee, 0x40, 0xe3, 0xd8, 0xb1, 0x26, 0x39, 0xd0, 0x44, + 0x00, 0x7d, 0x3a, 0x07, 0x5a, 0xfd, 0x2a, 0x94, 0xc3, 0x20, 0x7a, 0xda, 0xf9, 0x4f, 0x11, 0x9a, + 0x9b, 0x39, 0x13, 0x4d, 0x96, 0x78, 0x29, 0x8d, 0x98, 0xbb, 0x51, 0x8a, 0x41, 0x40, 0x26, 0x16, + 0xe4, 0x57, 0xa1, 0x9a, 0x2d, 0x4f, 0xdd, 0xc0, 0x97, 0xb6, 0xae, 0x64, 0xcb, 0x53, 0xc3, 0x27, + 0xdf, 0x42, 0x8b, 0x79, 0x73, 0x37, 0x7d, 0xee, 0xc6, 0x09, 0x0b, 0xe2, 0x88, 0x1b, 0xbb, 0xdd, + 0xfd, 0xf8, 0x25, 0xf2, 0xf4, 0x9e, 0xe3, 0xcd, 0x6d, 0xfa, 0x3c, 0x0d, 0x18, 0x1d, 0x71, 0x6e, + 0x66, 0x37, 0x98, 0x37, 0xb7, 0x9f, 0x8b, 0x19, 0xb9, 0x07, 0x90, 0x2c, 0xb3, 0x33, 0xd7, 0x8f, + 0xd9, 0xfe, 0x33, 0x5e, 0xab, 0x15, 0xbb, 0x8e, 0xc8, 0x00, 0x01, 0xec, 0x1a, 0x98, 0x37, 0xdf, + 0xd7, 0x2a, 0xfc, 0x38, 0x7c, 0x2c, 0xb1, 0xae, 0xac, 0xcd, 0x7c, 0xdc, 0xf9, 0x53, 0x01, 0xee, + 0xfe, 0x68, 0x27, 0x74, 0xbd, 0x81, 0x31, 0xee, 0xf5, 0x87, 0xfa, 0x40, 0xdd, 0xc2, 0xcf, 0x67, + 0x4d, 0xc6, 0x8f, 0xf6, 0xd5, 0x42, 0x3e, 0xec, 0x8a, 0xcf, 0x6b, 0x8d, 0xac, 0x7d, 0xb5, 0x24, + 0x47, 0x5d, 0xb5, 0x8c, 0x16, 0x75, 0xec, 0x9e, 0x39, 0x1e, 0xf6, 0x1c, 0x7d, 0x7f, 0x5f, 0xad, + 0x5c, 0x05, 0xba, 0x6a, 0xf5, 0x0a, 0xd0, 0xdd, 0x57, 0x6b, 0x57, 0x81, 0xae, 0xaa, 0x74, 0xfe, + 0x5e, 0x84, 0xfa, 0xba, 0xea, 0x90, 0xdf, 0xc9, 0xd0, 0x2c, 0x70, 0xc3, 0xbd, 0x7f, 0x5b, 0x95, + 0x12, 0x23, 0x5e, 0x75, 0x45, 0x60, 0xbe, 0x06, 0xd5, 0x85, 0x97, 0x31, 0x19, 0x04, 0x8a, 0x2d, + 0x67, 0xa4, 0x0d, 0xc5, 0x40, 0xf8, 0x7e, 0xcb, 0x2e, 0x06, 0x3e, 0x79, 0x0f, 0xee, 0x64, 0x31, + 0xd6, 0x26, 0x77, 0x16, 0x84, 0x94, 0x7f, 0x65, 0xd1, 0xff, 0xb4, 0x05, 0x7c, 0x24, 0x51, 0x5c, + 0x30, 0xa3, 0xd3, 0x94, 0x32, 0x6e, 0xda, 0xba, 0x2d, 0x67, 0xe4, 0x0d, 0xa8, 0xa7, 0x41, 0x34, + 0x77, 0xb3, 0xe0, 0x7b, 0x2a, 0x2d, 0xac, 0x20, 0x30, 0x0e, 0xbe, 0xe7, 0xfe, 0x73, 0xba, 0x9c, + 0xcd, 0x68, 0x2a, 0xc4, 0x35, 0x2e, 0x06, 0x01, 0x71, 0x05, 0x64, 0xaf, 0x5c, 0x1e, 0xb7, 0x99, + 0x6c, 0x61, 0x94, 0x74, 0xf5, 0x15, 0x9f, 0xa3, 0x90, 0xad, 0x85, 0x75, 0x21, 0x64, 0x52, 0xd8, + 0xe9, 0x4a, 0x6b, 0xf1, 0xf4, 0xd6, 0x04, 0x45, 0x77, 0x1e, 0xe9, 0xb6, 0xa9, 0x3b, 0xea, 0x16, + 0xa9, 0x42, 0xd1, 0xb0, 0xd4, 0x02, 0x9a, 0xd8, 0x9a, 0x98, 0x8e, 0x6b, 0x98, 0x5f, 0xea, 0x87, + 0x8e, 0x5a, 0xec, 0xfc, 0xa3, 0x08, 0xf5, 0x75, 0x9d, 0xc4, 0xc3, 0x65, 0xe9, 0x74, 0xdd, 0xf6, + 0x49, 0xe7, 0xce, 0xd2, 0x69, 0xde, 0xf5, 0xbd, 0x05, 0x0d, 0x3f, 0x63, 0x6b, 0x85, 0xa2, 0x50, + 0xf0, 0x33, 0x96, 0x2b, 0x60, 0xcf, 0x17, 0x05, 0xd2, 0x9a, 0x38, 0x24, 0x6f, 0x42, 0x7d, 0xb1, + 0x0c, 0x59, 0x30, 0xf5, 0x32, 0x26, 0x0d, 0x79, 0x09, 0x90, 0x87, 0x50, 0x9a, 0x27, 0x94, 0x1b, + 0xb0, 0xd1, 0xbd, 0x7f, 0x5b, 0x21, 0xdf, 0x3b, 0x4e, 0xa8, 0x8d, 0x84, 0xed, 0xbf, 0x14, 0xa0, + 0x74, 0x9c, 0x50, 0xb2, 0x83, 0xd9, 0x76, 0xea, 0x25, 0xee, 0x79, 0x3a, 0xc3, 0x98, 0x13, 0x69, + 0x0f, 0x38, 0xf6, 0x24, 0x9d, 0x19, 0x3e, 0x31, 0x40, 0xe1, 0xbd, 0xf4, 0x34, 0x0e, 0x65, 0x56, + 0xff, 0xf0, 0x65, 0xb6, 0xd9, 0xb3, 0x24, 0xc9, 0x5e, 0xd3, 0x3b, 0x5f, 0x80, 0x92, 0xa3, 0x57, + 0x73, 0x77, 0x0d, 0x4a, 0x86, 0xf5, 0x91, 0x5a, 0x10, 0x83, 0x87, 0x22, 0x63, 0xaf, 0xcd, 0x5f, + 0x42, 0xd8, 0x1c, 0x3f, 0x52, 0xcb, 0x9d, 0x3f, 0x40, 0x73, 0xb3, 0x13, 0x22, 0xf7, 0xa1, 0x79, + 0x16, 0x67, 0xcc, 0x0d, 0x66, 0x1b, 0xe9, 0x04, 0x9b, 0x0e, 0x1b, 0x10, 0x37, 0x66, 0x3c, 0xa5, + 0xbc, 0x07, 0x77, 0xc2, 0x20, 0x5a, 0xae, 0xdc, 0xf5, 0x61, 0xa5, 0xe5, 0xdb, 0x1c, 0x5e, 0x27, + 0x0a, 0x4c, 0xd7, 0x35, 0xd9, 0x2b, 0x61, 0x77, 0x7f, 0x4e, 0xd3, 0x0c, 0x53, 0x8d, 0x30, 0x4a, + 0x3e, 0x45, 0x9b, 0x5d, 0xd9, 0x54, 0x7e, 0xc5, 0xab, 0x1b, 0xb2, 0xd8, 0x5d, 0x04, 0xd3, 0x34, + 0xce, 0x68, 0x7a, 0x1e, 0x4c, 0x45, 0x19, 0xab, 0xdb, 0x6d, 0x16, 0x9f, 0x6c, 0xa0, 0xb8, 0x54, + 0xba, 0x72, 0x2f, 0xbd, 0xbd, 0x2c, 0xcc, 0x9f, 0xae, 0xec, 0xdc, 0xdf, 0x77, 0xa0, 0xc9, 0x36, + 0x35, 0x44, 0x16, 0x02, 0x76, 0xa9, 0x71, 0x0f, 0x40, 0xbc, 0x3b, 0xdc, 0x79, 0x16, 0xf3, 0x78, + 0x51, 0xec, 0xba, 0x40, 0x8e, 0xb3, 0x98, 0xbc, 0x0d, 0x2d, 0x29, 0x66, 0xcb, 0x28, 0xa2, 0xa1, + 0x7c, 0x31, 0x34, 0x05, 0xe8, 0x70, 0xac, 0xf3, 0xef, 0x12, 0xd4, 0xd7, 0x4d, 0x1b, 0x3a, 0x21, + 0xcd, 0x22, 0x19, 0xe6, 0x38, 0x44, 0xbf, 0xf5, 0x22, 0x16, 0xb8, 0x29, 0x4d, 0x42, 0xef, 0x22, + 0x2f, 0x74, 0x08, 0xd9, 0x1c, 0x21, 0xaf, 0x83, 0x12, 0xc6, 0x53, 0x2f, 0xc4, 0xde, 0x41, 0x38, + 0x69, 0x8d, 0xcf, 0x8d, 0x84, 0x07, 0x24, 0x5d, 0xc4, 0x8c, 0xa2, 0x4c, 0x44, 0xba, 0x22, 0x00, + 0x21, 0x14, 0xbc, 0x2c, 0x09, 0xf2, 0x58, 0xe7, 0xc0, 0x38, 0x09, 0xf0, 0x66, 0x92, 0x89, 0x52, + 0x11, 0xea, 0x72, 0x2d, 0x14, 0xff, 0x1a, 0x60, 0x9a, 0x5e, 0x24, 0x2c, 0x76, 0xbd, 0x70, 0xce, + 0x43, 0xbd, 0xdd, 0x7d, 0xe3, 0x8a, 0x6f, 0xf2, 0x97, 0xe0, 0x21, 0xd7, 0xe9, 0x85, 0x73, 0xbb, + 0x3e, 0xcd, 0x87, 0x64, 0x17, 0x54, 0xb1, 0xaf, 0x5c, 0xe1, 0x29, 0xbd, 0xe0, 0xf9, 0x00, 0x7d, + 0x02, 0x71, 0x41, 0x7a, 0x4c, 0x2f, 0xb0, 0x3d, 0x92, 0x87, 0xd8, 0x50, 0x05, 0xd1, 0x1e, 0x09, + 0xc1, 0xa5, 0xee, 0x27, 0x50, 0x47, 0x17, 0x9b, 0xf3, 0x03, 0x35, 0xf8, 0x81, 0xb6, 0x7f, 0x7c, + 0x20, 0xf4, 0xb7, 0x39, 0x9e, 0x47, 0x09, 0xe4, 0x08, 0x1f, 0x76, 0xd2, 0x7c, 0x9c, 0x8e, 0x5b, + 0x34, 0xf9, 0x16, 0x2d, 0x61, 0x45, 0x44, 0x71, 0x83, 0x5d, 0x50, 0x73, 0x5b, 0xae, 0x15, 0x5b, + 0xe2, 0xd8, 0xd2, 0xa4, 0x1b, 0x9a, 0xf2, 0xb3, 0x2f, 0xfd, 0xc4, 0xa5, 0xd1, 0xd4, 0x4b, 0xf8, + 0x63, 0x50, 0xb1, 0xdb, 0x02, 0x9f, 0xf8, 0x89, 0x8e, 0x68, 0xc7, 0x87, 0xc6, 0x46, 0xbb, 0x8d, + 0x9f, 0x5a, 0x12, 0x69, 0x18, 0xcf, 0xa5, 0x13, 0x48, 0x0f, 0xd3, 0xc3, 0x78, 0x8e, 0x9f, 0x3a, + 0x5d, 0x3d, 0x13, 0xde, 0x28, 0xf2, 0x54, 0x2d, 0x5d, 0x3d, 0xe3, 0xae, 0xf8, 0x3a, 0x28, 0x2c, + 0x17, 0x09, 0x57, 0xae, 0x31, 0x21, 0x42, 0x0f, 0x53, 0xf2, 0xc6, 0x5c, 0x96, 0x8c, 0xc2, 0xba, + 0x64, 0x7c, 0x2a, 0x4b, 0x93, 0xa8, 0xe9, 0xf7, 0x6f, 0xe9, 0xeb, 0xf7, 0x36, 0x8a, 0xd2, 0x67, + 0x50, 0x0c, 0x4f, 0xf9, 0x5e, 0xed, 0x6b, 0x1f, 0xa4, 0x6b, 0xde, 0x30, 0xf6, 0xfc, 0xbe, 0x17, + 0x7a, 0xd1, 0x94, 0xda, 0xc5, 0xf0, 0x94, 0x7c, 0x07, 0x77, 0xf1, 0x7d, 0x40, 0xfd, 0xcb, 0xc4, + 0x90, 0xbf, 0x48, 0x1f, 0xdc, 0xb6, 0x56, 0x9f, 0x13, 0xd7, 0xa9, 0xc3, 0x56, 0x4f, 0xaf, 0x02, + 0xd9, 0x76, 0x08, 0x77, 0x7e, 0xa0, 0xf4, 0xc2, 0x1f, 0x20, 0xee, 0x01, 0x04, 0x99, 0x9b, 0x78, + 0x59, 0x16, 0x9c, 0x53, 0x69, 0xee, 0x7a, 0x90, 0x59, 0x02, 0x40, 0xcf, 0x08, 0x32, 0x37, 0x8c, + 0xa3, 0xb9, 0xcb, 0x82, 0x05, 0x8d, 0x97, 0x4c, 0x46, 0x5f, 0x2b, 0xc8, 0x86, 0x71, 0x34, 0x77, + 0x04, 0xd8, 0xf9, 0x16, 0xca, 0xbc, 0x6e, 0x5d, 0xc9, 0xab, 0x77, 0xa0, 0x61, 0x8f, 0x26, 0xe6, + 0xc0, 0xb5, 0x47, 0x7d, 0xc3, 0x54, 0x0b, 0xd8, 0x72, 0xf6, 0x0e, 0xb1, 0x0d, 0x76, 0xb1, 0xb3, + 0x9c, 0x58, 0x6a, 0x11, 0x73, 0xeb, 0x37, 0x23, 0x5b, 0x2d, 0x61, 0x1b, 0xd9, 0xb7, 0x47, 0xbd, + 0xc1, 0x61, 0x6f, 0xec, 0xa8, 0x65, 0x6c, 0x45, 0x86, 0xbd, 0x43, 0x4b, 0xad, 0x74, 0x3e, 0x87, + 0xc6, 0x86, 0xe5, 0xb0, 0x16, 0x0e, 0xbb, 0x22, 0x69, 0x0f, 0x0f, 0x64, 0xd2, 0x1e, 0x76, 0x0f, + 0xd4, 0x22, 0x4a, 0x6c, 0x5c, 0xa9, 0x0a, 0xc5, 0xfe, 0xa1, 0x5a, 0xc6, 0xff, 0xbd, 0xbe, 0x5a, + 0xe9, 0xfc, 0xab, 0x00, 0x35, 0xf9, 0xbc, 0x22, 0x03, 0x68, 0x88, 0x3c, 0xe4, 0xf2, 0x9f, 0x5d, + 0x44, 0x33, 0xf2, 0xf6, 0xcd, 0x6f, 0x32, 0xf1, 0x3c, 0x00, 0xc1, 0xe3, 0xed, 0xf4, 0xeb, 0xa0, + 0xe4, 0x85, 0x56, 0xa6, 0xdf, 0x9a, 0xac, 0xb2, 0x28, 0xca, 0x4b, 0xac, 0x4c, 0xba, 0x35, 0x59, + 0x5f, 0x31, 0x97, 0xe2, 0x03, 0x28, 0x75, 0x67, 0x01, 0x6f, 0x30, 0x65, 0xb6, 0xe5, 0xd8, 0x51, + 0x80, 0x5d, 0xe6, 0x3d, 0x80, 0x8c, 0x66, 0x98, 0xe5, 0x51, 0x2e, 0x72, 0x6d, 0x5d, 0x22, 0x86, + 0xdf, 0xf9, 0xe5, 0x8b, 0x1e, 0x1e, 0x68, 0x8f, 0x03, 0x61, 0x06, 0x47, 0xef, 0xab, 0x45, 0x02, + 0x50, 0xd5, 0xed, 0xb1, 0xd5, 0x33, 0xd5, 0x52, 0xe7, 0xcf, 0x45, 0x50, 0xf2, 0x47, 0xe2, 0x95, + 0x53, 0x17, 0xae, 0x3f, 0x75, 0xf1, 0xea, 0xa9, 0xaf, 0x34, 0x00, 0xa5, 0x1f, 0x36, 0x00, 0xd8, + 0x89, 0xd2, 0xf5, 0x5d, 0xf8, 0x18, 0xef, 0xc9, 0x03, 0x3e, 0x2f, 0xea, 0xb2, 0x66, 0x70, 0x4c, + 0x14, 0xf5, 0x63, 0x10, 0x25, 0xde, 0x8d, 0xe8, 0x8a, 0xf1, 0xbc, 0xdb, 0xee, 0xee, 0xde, 0xf2, + 0xc6, 0xdd, 0x33, 0xe9, 0x8a, 0x99, 0x18, 0x7a, 0x75, 0xce, 0xc5, 0x69, 0x67, 0x1f, 0x94, 0x1c, + 0xde, 0x7c, 0x57, 0x6d, 0x49, 0x2f, 0x29, 0xe4, 0xa5, 0xbd, 0x98, 0x97, 0xf6, 0x52, 0xe7, 0xaf, + 0x05, 0x50, 0xf2, 0x07, 0x30, 0xd1, 0xd7, 0xee, 0xb0, 0xd1, 0x9b, 0xde, 0xbf, 0xe5, 0xd9, 0x2c, + 0x12, 0x80, 0xf4, 0x07, 0xee, 0xf5, 0xff, 0x97, 0x3f, 0x74, 0x0e, 0x64, 0xcc, 0x10, 0x68, 0x5b, + 0x23, 0xc3, 0x74, 0x5c, 0x67, 0xe4, 0xf2, 0x81, 0xba, 0x45, 0x7e, 0x0a, 0x3f, 0x59, 0x63, 0x27, + 0x93, 0xa1, 0x63, 0x08, 0x41, 0xa1, 0x7f, 0xf4, 0xfb, 0xc1, 0x3c, 0xce, 0x0f, 0x18, 0xf0, 0x1f, + 0x1e, 0x3f, 0xf4, 0xe6, 0x34, 0x62, 0x0f, 0xce, 0x0f, 0x1e, 0xf0, 0x56, 0xe7, 0xc1, 0x0b, 0x7f, + 0xd0, 0xfc, 0xec, 0x3c, 0x49, 0x36, 0xf2, 0xcc, 0x69, 0x95, 0xeb, 0x1e, 0xfc, 0x2f, 0x00, 0x00, + 0xff, 0xff, 0xa2, 0xff, 0xc1, 0x19, 0xff, 0x14, 0x00, 0x00, } diff --git a/proto/ligato/vpp/interfaces/interface.proto b/proto/ligato/vpp/interfaces/interface.proto index 2929fdcb35..7ac45c39c9 100644 --- a/proto/ligato/vpp/interfaces/interface.proto +++ b/proto/ligato/vpp/interfaces/interface.proto @@ -51,10 +51,26 @@ message Interface { // the interface referenced by the numbered interface and this field is ignored. uint32 vrf = 6; + // SetDhcpClient enables DHCP client on interface. bool set_dhcp_client = 7; + + // Ip6Nd is used to enable/disable IPv6 ND address autoconfiguration + // and setting up default routes + message IP6ND { + // Enable IPv6 ND address autoconfiguration. + bool address_autoconfig = 1; + // Enable installing default routes. + bool install_default_routes = 2; + } + IP6ND ip6_nd = 14; + + // Mtu sets MTU (Maximum Transmission Unit) for this interface. + // If set to zero, default MTU (usually 9216) will be used. uint32 mtu = 8; + // Unnumbered is used for inheriting IP address from another interface. message Unnumbered { + // InterfaceWithIp is the name of interface to inherit IP address from. string interface_with_ip = 1; } Unnumbered unnumbered = 9; diff --git a/proto/ligato/vpp/interfaces/models.go b/proto/ligato/vpp/interfaces/models.go index 87e4feaf70..d4aa67f1c1 100644 --- a/proto/ligato/vpp/interfaces/models.go +++ b/proto/ligato/vpp/interfaces/models.go @@ -115,6 +115,13 @@ const ( BondedInterfacePrefix = "vpp/bond/{bond}/interface/{iface}/" ) +/* DHCP (client - derived, lease - notification) */ +const ( + // IP6NDKeyPrefix is used as a common prefix for keys derived from + // interfaces to represent enabled IP6 ND. + IP6NDKeyPrefix = "vpp/interface/ip6nd/" +) + /* DHCP (client - derived, lease - notification) */ const ( // DHCPClientKeyPrefix is used as a common prefix for keys derived from @@ -444,6 +451,22 @@ func ParseBondedInterfaceKey(key string) (bondIf, slaveIf string, isBondSlaveInt return "", "", false } +// IP6NDKey returns a (derived) key used to represent enabled IP6 ND. +func IP6NDKey(iface string) string { + if iface == "" { + iface = InvalidKeyPart + } + return IP6NDKeyPrefix + iface +} + +// ParseNameFromIP6NDKey returns suffix of the key. +func ParseNameFromIP6NDKey(key string) (iface string, isIP6NDKey bool) { + if suffix := strings.TrimPrefix(key, IP6NDKeyPrefix); suffix != key && suffix != "" { + return suffix, true + } + return +} + /* DHCP (client - derived, lease - notification) */ // DHCPClientKey returns a (derived) key used to represent enabled DHCP lease. diff --git a/proto/ligato/vpp/l3/l3.pb.go b/proto/ligato/vpp/l3/l3.pb.go index 70615ed837..eb5646ec4c 100644 --- a/proto/ligato/vpp/l3/l3.pb.go +++ b/proto/ligato/vpp/l3/l3.pb.go @@ -377,65 +377,6 @@ func (m *DHCPProxy_DHCPServer) GetIpAddress() string { return "" } -// IPv6 Neighbor Discovery -type IP6ND struct { - // Name of interface this config applies to. - Interface string `protobuf:"bytes,1,opt,name=interface,proto3" json:"interface,omitempty"` - // Enable IPv6 ND address autoconfiguration. - Autoconfig bool `protobuf:"varint,2,opt,name=autoconfig,proto3" json:"autoconfig,omitempty"` - // Enable installing default routes. - InstallDefaultRoutes bool `protobuf:"varint,3,opt,name=install_default_routes,json=installDefaultRoutes,proto3" json:"install_default_routes,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *IP6ND) Reset() { *m = IP6ND{} } -func (m *IP6ND) String() string { return proto.CompactTextString(m) } -func (*IP6ND) ProtoMessage() {} -func (*IP6ND) Descriptor() ([]byte, []int) { - return fileDescriptor_eb46f906a6f7c0e7, []int{3} -} - -func (m *IP6ND) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_IP6ND.Unmarshal(m, b) -} -func (m *IP6ND) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_IP6ND.Marshal(b, m, deterministic) -} -func (m *IP6ND) XXX_Merge(src proto.Message) { - xxx_messageInfo_IP6ND.Merge(m, src) -} -func (m *IP6ND) XXX_Size() int { - return xxx_messageInfo_IP6ND.Size(m) -} -func (m *IP6ND) XXX_DiscardUnknown() { - xxx_messageInfo_IP6ND.DiscardUnknown(m) -} - -var xxx_messageInfo_IP6ND proto.InternalMessageInfo - -func (m *IP6ND) GetInterface() string { - if m != nil { - return m.Interface - } - return "" -} - -func (m *IP6ND) GetAutoconfig() bool { - if m != nil { - return m.Autoconfig - } - return false -} - -func (m *IP6ND) GetInstallDefaultRoutes() bool { - if m != nil { - return m.InstallDefaultRoutes - } - return false -} - func init() { proto.RegisterEnum("ligato.vpp.l3.IPScanNeighbor_Mode", IPScanNeighbor_Mode_name, IPScanNeighbor_Mode_value) proto.RegisterType((*ProxyARP)(nil), "ligato.vpp.l3.ProxyARP") @@ -444,49 +385,44 @@ func init() { proto.RegisterType((*IPScanNeighbor)(nil), "ligato.vpp.l3.IPScanNeighbor") proto.RegisterType((*DHCPProxy)(nil), "ligato.vpp.l3.DHCPProxy") proto.RegisterType((*DHCPProxy_DHCPServer)(nil), "ligato.vpp.l3.DHCPProxy.DHCPServer") - proto.RegisterType((*IP6ND)(nil), "ligato.vpp.l3.IP6ND") } func init() { proto.RegisterFile("ligato/vpp/l3/l3.proto", fileDescriptor_eb46f906a6f7c0e7) } var fileDescriptor_eb46f906a6f7c0e7 = []byte{ - // 597 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x93, 0x51, 0x6f, 0xd3, 0x30, - 0x10, 0xc7, 0x49, 0xd7, 0x76, 0xcd, 0x6d, 0xed, 0x8a, 0x05, 0x53, 0x54, 0x31, 0x28, 0x19, 0x12, - 0x13, 0x12, 0xa9, 0xb4, 0x8e, 0xbe, 0x20, 0x1e, 0x5a, 0x8a, 0xb4, 0x48, 0x30, 0xa2, 0x6c, 0xec, - 0x81, 0x97, 0xc8, 0x8b, 0xdd, 0xce, 0x92, 0x13, 0x47, 0xb6, 0x1b, 0x75, 0xe2, 0x23, 0xf0, 0x71, - 0xf8, 0x2e, 0x7c, 0x1e, 0x14, 0x27, 0xd9, 0xda, 0x49, 0xbc, 0x9d, 0xfe, 0xf7, 0x3b, 0xfb, 0xee, - 0xfe, 0x36, 0x1c, 0x72, 0xb6, 0xc4, 0x5a, 0x8c, 0xf2, 0x2c, 0x1b, 0xf1, 0xf1, 0x88, 0x8f, 0xbd, - 0x4c, 0x0a, 0x2d, 0x50, 0xb7, 0xd4, 0xbd, 0x3c, 0xcb, 0x3c, 0x3e, 0x76, 0x7f, 0x37, 0xa0, 0x13, - 0x48, 0xb1, 0xbe, 0x9b, 0x86, 0x01, 0x9a, 0x02, 0xb0, 0x54, 0x53, 0xb9, 0xc0, 0x31, 0x55, 0x8e, - 0x35, 0xdc, 0x39, 0xd9, 0x3b, 0x7d, 0xed, 0x6d, 0x15, 0x78, 0x35, 0xec, 0xf9, 0x35, 0x19, 0x6e, - 0x14, 0xa1, 0x0f, 0xd0, 0x96, 0x38, 0x5d, 0x52, 0xe5, 0x34, 0x4c, 0xf9, 0xd1, 0xff, 0xca, 0xc3, - 0x82, 0x0a, 0x2b, 0x78, 0xf0, 0x0a, 0xec, 0xfb, 0xf3, 0x10, 0x82, 0x66, 0x8a, 0x13, 0xea, 0x58, - 0x43, 0xeb, 0xc4, 0x0e, 0x4d, 0x3c, 0x20, 0xd0, 0x32, 0x15, 0xc8, 0x85, 0xee, 0x82, 0x49, 0xa5, - 0x23, 0x96, 0x45, 0x98, 0x10, 0x59, 0x51, 0x7b, 0x46, 0xf4, 0xb3, 0x29, 0x21, 0x12, 0x0d, 0x61, - 0x9f, 0xe3, 0x0d, 0xa4, 0x61, 0x10, 0x28, 0xb4, 0x8a, 0x78, 0x0e, 0xed, 0x5c, 0x2e, 0x22, 0x46, - 0x9c, 0x9d, 0xa1, 0x75, 0xd2, 0x0d, 0x5b, 0xb9, 0x5c, 0xf8, 0xc4, 0xfd, 0xd3, 0x80, 0x9e, 0x1f, - 0x5c, 0xc6, 0x38, 0xbd, 0xa0, 0x6c, 0x79, 0x7b, 0x23, 0x24, 0x9a, 0x40, 0x33, 0x11, 0xa4, 0x6c, - 0xa6, 0x77, 0xea, 0x3e, 0x1a, 0x67, 0x1b, 0xf6, 0xbe, 0x09, 0x42, 0x43, 0xc3, 0xa3, 0x63, 0xe8, - 0xaa, 0x18, 0xa7, 0x91, 0xd9, 0x4d, 0x8e, 0xb9, 0x69, 0xa2, 0x1b, 0xee, 0x17, 0xa2, 0x5f, 0x69, - 0xc5, 0x30, 0x09, 0x5e, 0x47, 0x99, 0x14, 0x71, 0xa4, 0x59, 0x42, 0xab, 0x6e, 0xf6, 0x12, 0xbc, - 0x0e, 0xa4, 0x88, 0xaf, 0x58, 0x42, 0xd1, 0x11, 0x40, 0xc1, 0xac, 0x32, 0x82, 0x35, 0x75, 0x9a, - 0x06, 0xb0, 0x13, 0xbc, 0xfe, 0x61, 0x04, 0xf4, 0x06, 0x7a, 0xf5, 0x3d, 0x11, 0xa1, 0x1c, 0xdf, - 0x39, 0xad, 0xad, 0x8b, 0xe6, 0x85, 0x86, 0xde, 0xc2, 0x81, 0xd2, 0x98, 0xd3, 0x48, 0xdf, 0x4a, - 0xaa, 0x6e, 0x05, 0x27, 0x4e, 0xdb, 0x60, 0x3d, 0x23, 0x5f, 0xd5, 0xaa, 0x7b, 0x0a, 0xcd, 0x62, - 0x08, 0xb4, 0x0f, 0x9d, 0xb9, 0x7f, 0x39, 0x9d, 0x7d, 0xfd, 0x32, 0xef, 0x3f, 0x41, 0x1d, 0x68, - 0xfa, 0xc1, 0xf5, 0x59, 0xdf, 0xaa, 0xa2, 0x49, 0xbf, 0x51, 0x44, 0xb3, 0xef, 0x57, 0xe7, 0xfd, - 0x1d, 0xf7, 0xaf, 0x05, 0xf6, 0xfc, 0xfc, 0x73, 0x60, 0xbc, 0x45, 0xef, 0xe0, 0xa9, 0x12, 0x2b, - 0x19, 0xd3, 0x7a, 0xfd, 0x54, 0xa9, 0xca, 0xa4, 0x83, 0x32, 0x51, 0x7a, 0x40, 0x95, 0x42, 0x03, - 0xb0, 0xe5, 0x3a, 0xaa, 0x9c, 0x28, 0x17, 0xb4, 0x2b, 0xd7, 0xd7, 0x85, 0x17, 0xe8, 0x13, 0xec, - 0x2a, 0x2a, 0x73, 0x2a, 0x95, 0xd3, 0x34, 0x4f, 0xe9, 0xf8, 0xd1, 0xee, 0xef, 0xaf, 0x34, 0xd1, - 0xa5, 0x61, 0xc3, 0xba, 0x66, 0x30, 0x03, 0x78, 0x90, 0x37, 0xfc, 0xb6, 0x36, 0xfc, 0x2e, 0x76, - 0xbb, 0xd1, 0x64, 0xf9, 0x4c, 0x6c, 0x56, 0xb7, 0xe7, 0xfe, 0x82, 0x96, 0x1f, 0x4c, 0x2e, 0xe6, - 0xe8, 0x05, 0xd8, 0xf7, 0x6f, 0xbc, 0x9a, 0xe5, 0x41, 0x40, 0x2f, 0x01, 0xf0, 0x4a, 0x8b, 0x58, - 0xa4, 0x0b, 0xb6, 0x34, 0xa7, 0x74, 0xc2, 0x0d, 0x05, 0x9d, 0xc1, 0x21, 0x4b, 0x8b, 0x3d, 0xf3, - 0x88, 0xd0, 0x05, 0x5e, 0x71, 0x1d, 0x49, 0xb1, 0xd2, 0x54, 0x19, 0xbb, 0x3b, 0xe1, 0xb3, 0x2a, - 0x3b, 0x2f, 0x93, 0xa1, 0xc9, 0xcd, 0x26, 0x3f, 0xcf, 0x96, 0xa2, 0x1e, 0x99, 0x99, 0x8f, 0xfc, - 0x1e, 0x2f, 0x69, 0xaa, 0x47, 0xf9, 0x78, 0x64, 0xfe, 0xf2, 0x68, 0xeb, 0x8b, 0x7f, 0xcc, 0xb3, - 0x2c, 0xe2, 0xe3, 0x9b, 0xb6, 0xc9, 0x8d, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xa6, 0x7f, 0x2d, - 0x36, 0x01, 0x04, 0x00, 0x00, + // 533 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x93, 0xdf, 0x8a, 0x9b, 0x40, + 0x14, 0xc6, 0x6b, 0x62, 0xb2, 0xf1, 0xe4, 0xcf, 0xa6, 0x03, 0x2d, 0x12, 0x58, 0x9a, 0xba, 0x85, + 0x86, 0x42, 0x15, 0xe2, 0x36, 0x37, 0xa5, 0x17, 0x49, 0x53, 0x58, 0xa1, 0x7f, 0xc4, 0xa4, 0x7b, + 0xd1, 0x1b, 0x99, 0x75, 0x26, 0x89, 0xa0, 0x8e, 0xcc, 0xb8, 0xe2, 0x3e, 0x43, 0x1f, 0xa7, 0xef, + 0xd2, 0xe7, 0x29, 0x8e, 0xba, 0x4d, 0x16, 0xf6, 0xee, 0xf0, 0xf9, 0xfb, 0x3c, 0x67, 0xce, 0x37, + 0x03, 0x2f, 0xa3, 0x70, 0x8f, 0x33, 0x66, 0xe5, 0x69, 0x6a, 0x45, 0xb6, 0x15, 0xd9, 0x66, 0xca, + 0x59, 0xc6, 0xd0, 0xb0, 0xd2, 0xcd, 0x3c, 0x4d, 0xcd, 0xc8, 0x36, 0x7e, 0xb7, 0xa0, 0xe7, 0x72, + 0x56, 0xdc, 0x2f, 0x3d, 0x17, 0x2d, 0x01, 0xc2, 0x24, 0xa3, 0x7c, 0x87, 0x03, 0x2a, 0x74, 0x65, + 0xda, 0x9e, 0xf5, 0xe7, 0xaf, 0xcd, 0x13, 0x83, 0xd9, 0xc0, 0xa6, 0xd3, 0x90, 0xde, 0x91, 0x09, + 0x7d, 0x80, 0x2e, 0xc7, 0xc9, 0x9e, 0x0a, 0xbd, 0x25, 0xed, 0x17, 0x4f, 0xd9, 0xbd, 0x92, 0xf2, + 0x6a, 0x78, 0xf2, 0x0a, 0xb4, 0x87, 0xff, 0x21, 0x04, 0x6a, 0x82, 0x63, 0xaa, 0x2b, 0x53, 0x65, + 0xa6, 0x79, 0xb2, 0x9e, 0x10, 0xe8, 0x48, 0x07, 0x32, 0x60, 0xb8, 0x0b, 0xb9, 0xc8, 0xfc, 0x30, + 0xf5, 0x31, 0x21, 0xbc, 0xa6, 0xfa, 0x52, 0x74, 0xd2, 0x25, 0x21, 0x1c, 0x4d, 0x61, 0x10, 0xe1, + 0x23, 0xa4, 0x25, 0x11, 0x28, 0xb5, 0x9a, 0x78, 0x01, 0xdd, 0x9c, 0xef, 0xfc, 0x90, 0xe8, 0xed, + 0xa9, 0x32, 0x1b, 0x7a, 0x9d, 0x9c, 0xef, 0x1c, 0x62, 0xfc, 0x69, 0xc1, 0xc8, 0x71, 0x37, 0x01, + 0x4e, 0xbe, 0xd3, 0x70, 0x7f, 0xb8, 0x65, 0x1c, 0x2d, 0x40, 0x8d, 0x19, 0xa9, 0x86, 0x19, 0xcd, + 0x8d, 0x47, 0xc7, 0x39, 0x85, 0xcd, 0x6f, 0x8c, 0x50, 0x4f, 0xf2, 0xe8, 0x12, 0x86, 0x22, 0xc0, + 0x89, 0x2f, 0x77, 0x93, 0xe3, 0x48, 0x0e, 0x31, 0xf4, 0x06, 0xa5, 0xe8, 0xd4, 0x5a, 0x79, 0x98, + 0x18, 0x17, 0x7e, 0xca, 0x59, 0xe0, 0x67, 0x61, 0x4c, 0xeb, 0x69, 0xfa, 0x31, 0x2e, 0x5c, 0xce, + 0x82, 0x6d, 0x18, 0x53, 0x74, 0x01, 0x50, 0x32, 0x77, 0x29, 0xc1, 0x19, 0xd5, 0x55, 0x09, 0x68, + 0x31, 0x2e, 0x7e, 0x4a, 0x01, 0xbd, 0x81, 0x51, 0xd3, 0xc7, 0x27, 0x34, 0xc2, 0xf7, 0x7a, 0xe7, + 0xa4, 0xd1, 0xba, 0xd4, 0xd0, 0x5b, 0x38, 0x17, 0x19, 0x8e, 0xa8, 0x9f, 0x1d, 0x38, 0x15, 0x07, + 0x16, 0x11, 0xbd, 0x2b, 0xb1, 0x91, 0x94, 0xb7, 0x8d, 0x6a, 0xcc, 0x41, 0x2d, 0x0f, 0x81, 0x06, + 0xd0, 0x5b, 0x3b, 0x9b, 0xe5, 0xea, 0xeb, 0x97, 0xf5, 0xf8, 0x19, 0xea, 0x81, 0xea, 0xb8, 0x37, + 0x57, 0x63, 0xa5, 0xae, 0x16, 0xe3, 0x56, 0x59, 0xad, 0x7e, 0x6c, 0xaf, 0xc7, 0x6d, 0xe3, 0xaf, + 0x02, 0xda, 0xfa, 0xfa, 0xb3, 0x2b, 0xb3, 0x45, 0xef, 0xe0, 0xb9, 0x60, 0x77, 0x3c, 0xa0, 0xcd, + 0xfa, 0xa9, 0x10, 0x75, 0x48, 0xe7, 0xd5, 0x87, 0x2a, 0x03, 0x2a, 0x04, 0x9a, 0x80, 0xc6, 0x0b, + 0xbf, 0x4e, 0xa2, 0x5a, 0xd0, 0x19, 0x2f, 0x6e, 0xca, 0x2c, 0xd0, 0x27, 0x38, 0x13, 0x94, 0xe7, + 0x94, 0x0b, 0x5d, 0x95, 0x57, 0xe9, 0xf2, 0xd1, 0xee, 0x1f, 0x5a, 0xca, 0x6a, 0x23, 0x59, 0xaf, + 0xf1, 0x4c, 0x56, 0x00, 0xff, 0xe5, 0xa3, 0xbc, 0x95, 0xa3, 0xbc, 0xcb, 0xdd, 0x1e, 0x0d, 0x59, + 0x5d, 0x13, 0x2d, 0x6c, 0xc6, 0x5b, 0x2d, 0x7e, 0x5d, 0xed, 0x59, 0xd3, 0x35, 0x94, 0x6f, 0xe9, + 0x3d, 0xde, 0xd3, 0x24, 0xb3, 0x72, 0xdb, 0x92, 0xcf, 0xc9, 0x3a, 0x79, 0x65, 0x1f, 0xf3, 0x34, + 0xf5, 0x23, 0xfb, 0xb6, 0x2b, 0xbf, 0xd9, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x09, 0xdd, 0xc0, + 0x18, 0x84, 0x03, 0x00, 0x00, } diff --git a/proto/ligato/vpp/l3/l3.proto b/proto/ligato/vpp/l3/l3.proto index f90e6ba7fd..6da9c473a9 100644 --- a/proto/ligato/vpp/l3/l3.proto +++ b/proto/ligato/vpp/l3/l3.proto @@ -49,13 +49,3 @@ message DHCPProxy { uint32 rx_vrf_id = 2; repeated DHCPServer servers = 4; } - -// IPv6 Neighbor Discovery -message IP6ND { - // Name of interface this config applies to. - string interface = 1; - // Enable IPv6 ND address autoconfiguration. - bool autoconfig = 2; - // Enable installing default routes. - bool install_default_routes = 3; -} \ No newline at end of file diff --git a/proto/ligato/vpp/l3/models.go b/proto/ligato/vpp/l3/models.go index 470a26298b..231f1883e6 100644 --- a/proto/ligato/vpp/l3/models.go +++ b/proto/ligato/vpp/l3/models.go @@ -88,14 +88,6 @@ var ( }, models.WithNameTemplate( `{{.Interface}}/peer/{{.PeerAddr}}`, )) - - ModelIP6ND = models.Register(&IP6ND{}, models.Spec{ - Module: ModuleName, - Type: "ip6nd", - Version: "v2", - }, models.WithNameTemplate( - `{{.Interface}}`, - )) ) // ProxyARPKey returns key for global proxy arp @@ -149,13 +141,6 @@ func L3XCKey(iface string, protocol L3XConnect_Protocol) string { }) } -// IP6NDKey returns key for IP6ND -func IP6NDKey(iface string) string { - return models.Key(&IP6ND{ - Interface: iface, - }) -} - const ( proxyARPInterfacePrefix = "vpp/proxyarp/interface/" proxyARPInterfaceTemplate = proxyARPInterfacePrefix + "{iface}" diff --git a/proto/ligato/vpp/vpp.pb.go b/proto/ligato/vpp/vpp.pb.go index eb993d31a8..848ba95c93 100644 --- a/proto/ligato/vpp/vpp.pb.go +++ b/proto/ligato/vpp/vpp.pb.go @@ -47,7 +47,6 @@ type ConfigData struct { L3Xconnects []*l3.L3XConnect `protobuf:"bytes,45,rep,name=l3xconnects,proto3" json:"l3xconnects,omitempty"` DhcpProxies []*l3.DHCPProxy `protobuf:"bytes,46,rep,name=dhcp_proxies,json=dhcpProxies,proto3" json:"dhcp_proxies,omitempty"` TeibEntries []*l3.TeibEntry `protobuf:"bytes,47,rep,name=teib_entries,json=teibEntries,proto3" json:"teib_entries,omitempty"` - Ip6Nds []*l3.IP6ND `protobuf:"bytes,48,rep,name=ip6nds,proto3" json:"ip6nds,omitempty"` Nat44Global *nat.Nat44Global `protobuf:"bytes,50,opt,name=nat44_global,json=nat44Global,proto3" json:"nat44_global,omitempty"` Dnat44S []*nat.DNat44 `protobuf:"bytes,51,rep,name=dnat44s,proto3" json:"dnat44s,omitempty"` Nat44Interfaces []*nat.Nat44Interface `protobuf:"bytes,52,rep,name=nat44_interfaces,json=nat44Interfaces,proto3" json:"nat44_interfaces,omitempty"` @@ -200,13 +199,6 @@ func (m *ConfigData) GetTeibEntries() []*l3.TeibEntry { return nil } -func (m *ConfigData) GetIp6Nds() []*l3.IP6ND { - if m != nil { - return m.Ip6Nds - } - return nil -} - func (m *ConfigData) GetNat44Global() *nat.Nat44Global { if m != nil { return m.Nat44Global @@ -413,76 +405,75 @@ func init() { func init() { proto.RegisterFile("ligato/vpp/vpp.proto", fileDescriptor_0138a1608d5d59f2) } var fileDescriptor_0138a1608d5d59f2 = []byte{ - // 1128 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x96, 0x7f, 0x4f, 0xdc, 0x36, - 0x18, 0xc7, 0x55, 0xad, 0xed, 0x8a, 0x8f, 0x02, 0xf2, 0x18, 0x75, 0xd9, 0xd6, 0x51, 0xa4, 0x6a, - 0x5d, 0x4b, 0xef, 0x3a, 0x8e, 0xf1, 0xc7, 0xca, 0xaa, 0x1e, 0x5c, 0x0f, 0x6e, 0x62, 0x28, 0xf3, - 0xa1, 0xad, 0x62, 0x95, 0x22, 0x27, 0xe7, 0x1c, 0x96, 0xd2, 0xd8, 0xf2, 0x63, 0xae, 0xf0, 0x1a, - 0xf6, 0xa6, 0x27, 0x3f, 0x49, 0xee, 0x57, 0x82, 0xfa, 0x47, 0xa2, 0x3c, 0x7e, 0x3e, 0xdf, 0xaf, - 0x1d, 0xe7, 0xb1, 0x63, 0xb2, 0x9e, 0xaa, 0x91, 0x70, 0xba, 0x35, 0x36, 0xc6, 0x5f, 0x4d, 0x63, - 0xb5, 0xd3, 0x94, 0xe4, 0xad, 0xcd, 0xb1, 0x31, 0x9b, 0x6c, 0x86, 0x10, 0x51, 0xe2, 0xaf, 0x9c, - 0x9a, 0xcf, 0xc4, 0xa9, 0xbf, 0x8a, 0xcc, 0xf7, 0x33, 0x19, 0x65, 0x12, 0x75, 0x9d, 0xdf, 0x8b, - 0xec, 0x56, 0x25, 0x9b, 0xa4, 0xfa, 0xb3, 0xb1, 0x3a, 0x92, 0x05, 0xf1, 0x6c, 0x96, 0xc8, 0x9c, - 0xb4, 0x89, 0x88, 0x25, 0x4c, 0x1f, 0xeb, 0x8c, 0xa6, 0x18, 0x18, 0x91, 0x15, 0xc4, 0xd3, 0x5b, - 0x08, 0x27, 0x9c, 0xac, 0x1d, 0x2b, 0xc8, 0x38, 0xbf, 0xd7, 0x18, 0xa4, 0xbb, 0xad, 0xc8, 0xaa, - 0xe1, 0x48, 0x86, 0x43, 0xfd, 0x49, 0xa8, 0xb2, 0x8f, 0x47, 0xf3, 0x48, 0xa2, 0xa2, 0x1a, 0xe7, - 0x74, 0xb7, 0x75, 0x1d, 0xeb, 0x2c, 0x93, 0xb1, 0xab, 0x93, 0xb5, 0x5b, 0xc2, 0x16, 0x93, 0xbf, - 0xb9, 0x31, 0x9f, 0x48, 0xdb, 0x35, 0xd3, 0x8d, 0xed, 0xd7, 0xe5, 0x20, 0x1f, 0xcf, 0x67, 0xac, - 0xbe, 0x9a, 0xbc, 0xdd, 0x82, 0xc8, 0xc9, 0xc9, 0xe8, 0x16, 0xfa, 0x1f, 0xdb, 0xba, 0xcf, 0x9a, - 0x09, 0xe7, 0xaf, 0x22, 0xb3, 0x39, 0x93, 0x31, 0x57, 0x99, 0xc3, 0x5b, 0x4d, 0x0e, 0xec, 0x78, - 0x1f, 0x6f, 0x79, 0x6e, 0xfb, 0xbf, 0x35, 0x42, 0x8e, 0x74, 0x96, 0xa8, 0x51, 0x57, 0x38, 0x41, - 0xdf, 0x11, 0x32, 0xfd, 0x16, 0x8c, 0x6c, 0x7d, 0xf5, 0xbc, 0xb1, 0xbb, 0xd5, 0x9c, 0x96, 0x5c, - 0x73, 0x9a, 0x6d, 0xf6, 0xcb, 0x47, 0x3e, 0xa3, 0xa1, 0xbf, 0x90, 0x7b, 0xfe, 0x23, 0x03, 0x6b, - 0xa0, 0xf8, 0xbb, 0x5b, 0xc4, 0x03, 0x23, 0x32, 0x9e, 0x93, 0xf4, 0x27, 0x72, 0x57, 0xc4, 0x29, - 0xb0, 0x75, 0x54, 0x7c, 0x33, 0xab, 0xf0, 0x75, 0xdb, 0x39, 0x3a, 0xe5, 0x08, 0x20, 0x18, 0x25, - 0xc0, 0xbe, 0xad, 0x01, 0xa3, 0xa4, 0xd9, 0x39, 0xec, 0x71, 0x04, 0xe8, 0x21, 0x59, 0x99, 0x2b, - 0x07, 0x60, 0x4f, 0xaa, 0xa3, 0x49, 0x77, 0x9b, 0x87, 0x08, 0x75, 0x91, 0xe1, 0x0f, 0xa3, 0x99, - 0x08, 0xe8, 0x4b, 0x72, 0x37, 0x51, 0x11, 0xb0, 0x1f, 0x51, 0xf9, 0x68, 0x41, 0xd9, 0xeb, 0x1f, - 0xbe, 0xcf, 0x9c, 0xbd, 0xe1, 0x08, 0xf9, 0x0e, 0xcb, 0x1a, 0x0a, 0x8d, 0x50, 0x16, 0xd8, 0x56, - 0x6d, 0x87, 0x1f, 0x8e, 0x72, 0x28, 0x10, 0xca, 0xf2, 0x87, 0xa5, 0xc4, 0x47, 0x40, 0x77, 0xc8, - 0x7d, 0x2c, 0x0f, 0x60, 0xcf, 0x51, 0xbb, 0x3e, 0xa7, 0x6d, 0x37, 0xb9, 0x4f, 0xf2, 0x82, 0xf1, - 0xc3, 0x13, 0xd6, 0x00, 0xfb, 0xb9, 0x66, 0x78, 0xed, 0x66, 0x87, 0x07, 0xc5, 0xf0, 0x3c, 0x44, - 0xf7, 0xc8, 0x92, 0xb1, 0xfa, 0xfa, 0x26, 0x14, 0xd6, 0xb0, 0x17, 0x5b, 0x77, 0x6a, 0x14, 0x81, - 0xcf, 0x77, 0x78, 0xc0, 0x1f, 0x20, 0xd9, 0xb1, 0x86, 0xf6, 0xc8, 0xaa, 0x32, 0x10, 0x8b, 0x2c, - 0xcc, 0xa4, 0x1a, 0x5d, 0x46, 0xda, 0xb2, 0x97, 0xa8, 0xfd, 0x61, 0x41, 0xdb, 0x0f, 0x06, 0xb1, - 0xc8, 0xce, 0x0a, 0x88, 0xaf, 0xe4, 0xaa, 0x32, 0xf6, 0x43, 0x1d, 0xdb, 0x04, 0xd8, 0x4e, 0xed, - 0x50, 0xff, 0xb6, 0xc9, 0xb9, 0x88, 0x52, 0xc9, 0x11, 0xa2, 0x6f, 0x48, 0xc3, 0x2f, 0x9f, 0x7c, - 0x62, 0x80, 0xbd, 0x42, 0xcd, 0xe3, 0x05, 0xcd, 0x69, 0xbb, 0x9c, 0x48, 0x3e, 0x4b, 0xd3, 0x37, - 0x64, 0x79, 0x78, 0x19, 0x9b, 0xd0, 0xbf, 0x82, 0x92, 0xc0, 0x9a, 0xa8, 0x66, 0x0b, 0xea, 0xee, - 0xc9, 0x51, 0x80, 0xaf, 0xcb, 0x1b, 0x9e, 0x0e, 0x72, 0xd8, 0x8b, 0xfd, 0x1a, 0x0c, 0x65, 0xe6, - 0xac, 0x17, 0xb7, 0x6a, 0xc5, 0xe7, 0x52, 0x45, 0xf9, 0xd4, 0x36, 0x5c, 0xf1, 0xe8, 0xc5, 0x3b, - 0xe4, 0xbe, 0x32, 0xfb, 0xd9, 0x10, 0xd8, 0xeb, 0xda, 0x8f, 0xd7, 0x0f, 0xf6, 0xcf, 0xba, 0xbc, - 0x60, 0xe8, 0x5b, 0xb2, 0x9c, 0x09, 0xb7, 0xb7, 0x17, 0x8e, 0x52, 0x1d, 0x89, 0x94, 0xed, 0xe2, - 0xb4, 0xce, 0x15, 0x8b, 0x5f, 0xda, 0x67, 0x9e, 0x39, 0x46, 0x84, 0x37, 0xb2, 0x69, 0x40, 0x5f, - 0x93, 0xaf, 0x87, 0x18, 0x03, 0x6b, 0x63, 0x77, 0x1b, 0x8b, 0xd2, 0x2e, 0x6a, 0x79, 0x89, 0xd1, - 0x3e, 0x59, 0xcb, 0x7b, 0x9c, 0x59, 0xde, 0x7b, 0x28, 0x7d, 0x52, 0xdb, 0xeb, 0x74, 0x71, 0xaf, - 0x66, 0x73, 0x31, 0xd0, 0x0e, 0xc9, 0xc7, 0x12, 0x1a, 0xad, 0x53, 0x60, 0xbf, 0x56, 0x37, 0x89, - 0x89, 0x4b, 0x67, 0x38, 0xb4, 0x12, 0x20, 0xd0, 0x3a, 0xe5, 0x04, 0x45, 0xfe, 0x11, 0xe8, 0x31, - 0x21, 0xb8, 0x93, 0x87, 0x60, 0x86, 0xc0, 0x0e, 0xd0, 0xe1, 0xf9, 0xdc, 0x4e, 0x81, 0xfb, 0xfc, - 0x40, 0xc6, 0x57, 0x56, 0xb9, 0x9b, 0x40, 0xa7, 0x2a, 0xbe, 0xf1, 0x1b, 0x54, 0x24, 0x40, 0xf2, - 0x25, 0xcc, 0x0e, 0xcc, 0xd0, 0xaf, 0xbb, 0xa5, 0xc2, 0x48, 0x00, 0xfb, 0x1d, 0x7d, 0x9e, 0xdd, - 0xee, 0xd3, 0x01, 0xd0, 0xb1, 0x12, 0x4e, 0xe9, 0x8c, 0x3f, 0xc8, 0x4d, 0x04, 0xd0, 0x8f, 0x84, - 0xe5, 0x1e, 0xee, 0x2a, 0xcb, 0x64, 0xea, 0x8b, 0xc7, 0xc9, 0xd8, 0x43, 0xc0, 0xde, 0xa2, 0xe5, - 0x76, 0xd5, 0xf2, 0x1c, 0xd9, 0x60, 0x82, 0xf2, 0x0d, 0x6c, 0x5f, 0x6c, 0x06, 0xda, 0x23, 0x6b, - 0x7e, 0x2b, 0x0e, 0x95, 0xb1, 0x72, 0xa8, 0x2c, 0x16, 0x75, 0xaf, 0xba, 0x37, 0xe0, 0x76, 0xdd, - 0x0f, 0x78, 0xc1, 0xf0, 0x55, 0xdf, 0xd0, 0x9f, 0x6a, 0xe8, 0x6f, 0x64, 0x19, 0x7d, 0x9c, 0xbe, - 0xd4, 0xe0, 0x80, 0x1d, 0x57, 0x17, 0x13, 0x7a, 0x9c, 0xeb, 0x13, 0x0d, 0x8e, 0x37, 0x7c, 0x70, - 0x9e, 0xb3, 0xf4, 0x88, 0xa0, 0x5d, 0x28, 0xaf, 0x63, 0x69, 0xf2, 0x17, 0x3b, 0x41, 0xf9, 0x66, - 0x45, 0xfe, 0xbe, 0x44, 0xf8, 0x8a, 0x8f, 0x27, 0x21, 0xd0, 0x03, 0xd2, 0xf0, 0xff, 0x8d, 0xb2, - 0x64, 0x07, 0xd5, 0x92, 0xc5, 0xdf, 0xca, 0x80, 0x8f, 0xf7, 0x8b, 0x92, 0x25, 0xbe, 0xa1, 0xa8, - 0xd8, 0x77, 0x64, 0x05, 0xd5, 0xa9, 0x8e, 0x45, 0x0a, 0x6a, 0x08, 0x2c, 0xa8, 0xae, 0x6c, 0x34, - 0x38, 0xf5, 0xc4, 0xa0, 0xdf, 0xe5, 0x0f, 0x7d, 0x78, 0x5a, 0xf2, 0xf4, 0x80, 0x60, 0x43, 0x68, - 0x7c, 0x31, 0xf8, 0xf5, 0xf9, 0x57, 0x75, 0x06, 0xd0, 0x20, 0xaf, 0x16, 0xbe, 0xec, 0x83, 0xa0, - 0x80, 0x27, 0xfd, 0x83, 0x93, 0xd2, 0xaa, 0x6c, 0x04, 0x8c, 0xdf, 0xd2, 0xff, 0xa0, 0x20, 0xf2, - 0xfe, 0xcb, 0x08, 0x3f, 0x00, 0x9e, 0x88, 0xca, 0x09, 0xb8, 0xa8, 0x6e, 0xa3, 0xf9, 0x49, 0xaa, - 0x1f, 0xf4, 0xfa, 0x1f, 0x78, 0x03, 0x83, 0xe2, 0xed, 0xff, 0x21, 0x1b, 0xb9, 0x76, 0x72, 0x9a, - 0x0a, 0x8d, 0xb0, 0xe2, 0x13, 0xb0, 0x7f, 0xd1, 0xe5, 0x69, 0xd5, 0xa5, 0x97, 0xea, 0xcf, 0x81, - 0x27, 0x03, 0x04, 0xf9, 0x3a, 0x36, 0xf7, 0x4a, 0x7d, 0xde, 0x4a, 0xff, 0x24, 0x6b, 0x0b, 0xc6, - 0xc0, 0x3e, 0xd6, 0xd5, 0xec, 0x9c, 0x65, 0x4f, 0x0a, 0x77, 0x65, 0x25, 0x5f, 0x9d, 0xf7, 0x84, - 0xed, 0x0b, 0xb2, 0x7c, 0xa6, 0x9d, 0x4a, 0x54, 0x8c, 0x8b, 0x84, 0xfe, 0x41, 0x96, 0x26, 0xfb, - 0x05, 0xbb, 0x83, 0x43, 0xdd, 0xf9, 0xd2, 0x69, 0x60, 0xd6, 0x80, 0x4f, 0xe5, 0xdb, 0xa7, 0xe4, - 0xde, 0xc0, 0x09, 0xac, 0xc6, 0x8a, 0xe9, 0xb3, 0x2f, 0x99, 0xa2, 0x72, 0xc6, 0xed, 0x70, 0xe7, - 0xe2, 0xc5, 0x48, 0x97, 0x2a, 0x85, 0x67, 0x9b, 0x57, 0x62, 0x24, 0x33, 0xd7, 0x1a, 0xb7, 0x5b, - 0x78, 0xb4, 0x69, 0x4d, 0x4f, 0x3d, 0xd1, 0x7d, 0x6c, 0x69, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, - 0x0a, 0xf6, 0xd7, 0x5c, 0x53, 0x0b, 0x00, 0x00, + // 1108 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x56, 0x6d, 0x4f, 0xdc, 0x46, + 0x10, 0x56, 0xd4, 0x24, 0x0d, 0x7b, 0xbc, 0x69, 0x4b, 0xc9, 0x86, 0xb6, 0x29, 0x41, 0x42, 0xa5, + 0x09, 0xb9, 0x6b, 0x39, 0x9a, 0x0f, 0x0d, 0x8d, 0x72, 0x40, 0x0e, 0xae, 0xa2, 0xc8, 0xdd, 0x43, + 0x6d, 0x44, 0x23, 0x59, 0x6b, 0xdf, 0xfa, 0x58, 0xc9, 0xf1, 0xae, 0x76, 0x96, 0x0b, 0xfc, 0xd8, + 0xfe, 0x97, 0x68, 0xc7, 0xf6, 0xbd, 0xd9, 0x28, 0x1f, 0x6c, 0x79, 0x66, 0x9e, 0xe7, 0x99, 0xf1, + 0x7a, 0x66, 0xbd, 0x64, 0x2d, 0x55, 0x43, 0xe1, 0x74, 0x6b, 0x64, 0x8c, 0xbf, 0x9a, 0xc6, 0x6a, + 0xa7, 0x29, 0xc9, 0xbd, 0xcd, 0x91, 0x31, 0x1b, 0x6c, 0x0a, 0x21, 0xa2, 0xc4, 0x5f, 0x39, 0x6a, + 0x36, 0x12, 0xa7, 0xfe, 0x2a, 0x22, 0xdf, 0x4f, 0x45, 0x94, 0x49, 0xd4, 0x4d, 0x7e, 0x2f, 0xa2, + 0x9b, 0x95, 0x68, 0x92, 0xea, 0x4f, 0xc6, 0xea, 0x48, 0x16, 0x88, 0xed, 0x69, 0x44, 0xe6, 0xa4, + 0x4d, 0x44, 0x2c, 0x61, 0xf2, 0x58, 0x27, 0x34, 0x81, 0x81, 0x11, 0x59, 0x81, 0x78, 0x76, 0x07, + 0xc2, 0x09, 0x27, 0x6b, 0x6b, 0x05, 0x19, 0xe7, 0xf7, 0x1a, 0x81, 0x74, 0xaf, 0x15, 0x59, 0x35, + 0x18, 0xca, 0x70, 0xa0, 0x3f, 0x0a, 0x55, 0xe6, 0x78, 0x3c, 0x0b, 0x49, 0x54, 0x54, 0xa3, 0x9c, + 0xee, 0xb5, 0x6e, 0x62, 0x9d, 0x65, 0x32, 0x76, 0x75, 0xb4, 0x76, 0x4b, 0xd8, 0x62, 0xf1, 0x37, + 0xd6, 0x67, 0x03, 0x69, 0xbb, 0x66, 0xb9, 0xd1, 0x7f, 0x53, 0x16, 0xf9, 0x64, 0x36, 0x62, 0xf5, + 0xf5, 0xf8, 0xed, 0xe6, 0x48, 0x4e, 0x8e, 0xab, 0x9b, 0xcb, 0x3f, 0xb2, 0x75, 0x9f, 0x35, 0x13, + 0xce, 0x5f, 0x45, 0x64, 0x63, 0x2a, 0x62, 0xae, 0x33, 0x87, 0xb7, 0x9a, 0x18, 0xd8, 0xd1, 0x2b, + 0xbc, 0xe5, 0xb1, 0xad, 0xff, 0x57, 0x08, 0x39, 0xd2, 0x59, 0xa2, 0x86, 0xc7, 0xc2, 0x09, 0xfa, + 0x96, 0x90, 0xc9, 0xb7, 0x60, 0x64, 0xf3, 0xab, 0x9d, 0xc6, 0xde, 0x66, 0x73, 0xd2, 0x72, 0xcd, + 0x49, 0xb4, 0xd9, 0x2b, 0x1f, 0xf9, 0x14, 0x87, 0xfe, 0x4a, 0x1e, 0xf8, 0x8f, 0x0c, 0xac, 0x81, + 0xe4, 0xef, 0xee, 0x20, 0xf7, 0x8d, 0xc8, 0x78, 0x8e, 0xa4, 0x3f, 0x91, 0xfb, 0x22, 0x4e, 0x81, + 0xad, 0x21, 0xe3, 0x9b, 0x69, 0x86, 0xef, 0xdb, 0xce, 0xd1, 0x19, 0x47, 0x00, 0x02, 0xa3, 0x04, + 0xd8, 0xb7, 0x35, 0xc0, 0x28, 0x69, 0x76, 0x0e, 0xbb, 0x1c, 0x01, 0xf4, 0x90, 0x2c, 0xcf, 0xb4, + 0x03, 0xb0, 0xa7, 0xd5, 0x6a, 0xd2, 0xbd, 0xe6, 0x21, 0x82, 0x8e, 0x11, 0xc3, 0x97, 0xa2, 0x29, + 0x0b, 0xe8, 0x0b, 0x72, 0x3f, 0x51, 0x11, 0xb0, 0x1f, 0x91, 0xf9, 0x78, 0x8e, 0xd9, 0xed, 0x1d, + 0xbe, 0xcb, 0x9c, 0xbd, 0xe5, 0x08, 0xf2, 0x09, 0xcb, 0x1e, 0x0a, 0x8d, 0x50, 0x16, 0xd8, 0x66, + 0x6d, 0xc2, 0xf7, 0x47, 0x39, 0x28, 0x10, 0xca, 0xf2, 0xa5, 0x92, 0xe2, 0x2d, 0xa0, 0xbb, 0xe4, + 0x21, 0xb6, 0x07, 0xb0, 0x1d, 0xe4, 0xae, 0xcd, 0x70, 0xdb, 0x4d, 0xee, 0x83, 0xbc, 0xc0, 0xf8, + 0xf2, 0x84, 0x35, 0xc0, 0x7e, 0xae, 0x29, 0xaf, 0xdd, 0xec, 0xf0, 0xa0, 0x28, 0xcf, 0x83, 0xe8, + 0x3e, 0x59, 0x30, 0x56, 0xdf, 0xdc, 0x86, 0xc2, 0x1a, 0xf6, 0x7c, 0xf3, 0x5e, 0x0d, 0x23, 0xf0, + 0xf1, 0x0e, 0x0f, 0xf8, 0x23, 0x44, 0x76, 0xac, 0xa1, 0x5d, 0xb2, 0xa2, 0x0c, 0xc4, 0x22, 0x0b, + 0x33, 0xa9, 0x86, 0x57, 0x91, 0xb6, 0xec, 0x05, 0x72, 0x7f, 0x98, 0xe3, 0xf6, 0x82, 0x7e, 0x2c, + 0xb2, 0xf3, 0x02, 0xc4, 0x97, 0x73, 0x56, 0x69, 0xfb, 0x52, 0x47, 0x36, 0x01, 0xb6, 0x5b, 0x5b, + 0xea, 0x3f, 0x36, 0xb9, 0x10, 0x51, 0x2a, 0x39, 0x82, 0xe8, 0x6b, 0xd2, 0xf0, 0xe3, 0x93, 0x2f, + 0x0c, 0xb0, 0x97, 0xc8, 0x79, 0x32, 0xc7, 0x39, 0x6b, 0x97, 0x0b, 0xc9, 0xa7, 0xd1, 0xf4, 0x35, + 0x59, 0x1c, 0x5c, 0xc5, 0x26, 0xf4, 0xaf, 0xa0, 0x24, 0xb0, 0x26, 0xb2, 0xd9, 0x1c, 0xfb, 0xf8, + 0xf4, 0x28, 0xc0, 0xd7, 0xe5, 0x0d, 0x8f, 0x0e, 0x72, 0xb0, 0x27, 0xfb, 0x19, 0x0c, 0x65, 0xe6, + 0xac, 0x27, 0xb7, 0x6a, 0xc9, 0x17, 0x52, 0x45, 0xf9, 0xd2, 0x36, 0x5c, 0xf1, 0xe8, 0xc9, 0x6f, + 0xc8, 0x62, 0x26, 0xdc, 0xfe, 0x7e, 0x38, 0x4c, 0x75, 0x24, 0x52, 0xb6, 0x87, 0x0b, 0x35, 0xf3, + 0xf9, 0xfd, 0xb0, 0x9e, 0x7b, 0xcc, 0x09, 0x42, 0x78, 0x23, 0x9b, 0x18, 0xf4, 0x17, 0xf2, 0xf5, + 0x00, 0x6d, 0x60, 0x6d, 0xcc, 0xbb, 0x3e, 0x4f, 0x3d, 0x46, 0x2e, 0x2f, 0x61, 0xb4, 0x47, 0x56, + 0xf3, 0x8c, 0x53, 0x03, 0xbb, 0x8f, 0xd4, 0xa7, 0xb5, 0x59, 0x27, 0xe3, 0xba, 0x92, 0xcd, 0xd8, + 0x40, 0x3b, 0x24, 0xaf, 0x25, 0x34, 0x5a, 0xa7, 0xc0, 0x7e, 0xab, 0x8e, 0xfd, 0x58, 0xa5, 0x33, + 0x18, 0x58, 0x09, 0x10, 0x68, 0x9d, 0x72, 0x82, 0x24, 0xff, 0x08, 0xf4, 0x84, 0x10, 0xdc, 0x9b, + 0x43, 0x30, 0x03, 0x60, 0x07, 0xa8, 0xb0, 0x33, 0x33, 0xfb, 0xb8, 0x73, 0xf7, 0x65, 0x7c, 0x6d, + 0x95, 0xbb, 0x0d, 0x74, 0xaa, 0xe2, 0x5b, 0xbf, 0xe5, 0x44, 0x02, 0x24, 0x5f, 0xc0, 0x68, 0xdf, + 0x0c, 0xfc, 0x24, 0x2d, 0x14, 0x42, 0x02, 0xd8, 0x1f, 0xa8, 0xb3, 0x7d, 0xb7, 0x4e, 0x07, 0x40, + 0xc7, 0x4a, 0x38, 0xa5, 0x33, 0xfe, 0x28, 0x17, 0x11, 0x40, 0x3f, 0x10, 0x96, 0x6b, 0xb8, 0xeb, + 0x2c, 0x93, 0xa9, 0x6f, 0x07, 0x27, 0x63, 0x0f, 0x02, 0xf6, 0x06, 0x25, 0xb7, 0xaa, 0x92, 0x17, + 0x88, 0x0d, 0xc6, 0x50, 0xbe, 0x8e, 0xfe, 0x79, 0x37, 0xd0, 0x2e, 0x59, 0xf5, 0x9b, 0x6b, 0xa8, + 0x8c, 0x95, 0x03, 0x65, 0xb1, 0x4d, 0xbb, 0xd5, 0x69, 0xc7, 0x0d, 0xb8, 0x17, 0xf0, 0x02, 0xc3, + 0x57, 0xbc, 0xa3, 0x37, 0xe1, 0xd0, 0xdf, 0xc9, 0x22, 0xea, 0x38, 0x7d, 0xa5, 0xc1, 0x01, 0x3b, + 0xa9, 0x8e, 0x07, 0x6a, 0x5c, 0xe8, 0x53, 0x0d, 0x8e, 0x37, 0xbc, 0x71, 0x91, 0x63, 0xe9, 0x11, + 0x41, 0xb9, 0x50, 0xde, 0xc4, 0xd2, 0xe4, 0x2f, 0x76, 0x8a, 0xf4, 0x8d, 0x0a, 0xfd, 0x5d, 0x09, + 0xe1, 0xcb, 0xde, 0x1e, 0x9b, 0x40, 0x0f, 0x48, 0xc3, 0xff, 0x09, 0xca, 0x96, 0xed, 0x57, 0x5b, + 0x16, 0x7f, 0x14, 0x7d, 0x3e, 0x7a, 0x55, 0xb4, 0x2c, 0xf1, 0x8e, 0xa2, 0x63, 0xdf, 0x92, 0x65, + 0x64, 0xa7, 0x3a, 0x16, 0x29, 0xa8, 0x01, 0xb0, 0xa0, 0x3a, 0xab, 0x28, 0x70, 0xe6, 0x11, 0xfd, + 0xde, 0x31, 0x5f, 0xf2, 0xe6, 0x59, 0x89, 0xa7, 0x07, 0x04, 0x1d, 0xa1, 0xf1, 0xcd, 0xe0, 0x27, + 0xee, 0xef, 0xea, 0x0a, 0xa0, 0x40, 0xde, 0x2d, 0x7c, 0xd1, 0x1b, 0x41, 0x01, 0x1e, 0xe7, 0x07, + 0x27, 0xa5, 0x55, 0xd9, 0x10, 0x18, 0xbf, 0x23, 0x7f, 0xbf, 0x40, 0xe4, 0xf9, 0x4b, 0x0b, 0x3f, + 0x00, 0x9e, 0x71, 0xca, 0x05, 0xb8, 0xac, 0x6e, 0x8c, 0xf9, 0xd9, 0xa8, 0x17, 0x74, 0x7b, 0xef, + 0x79, 0x03, 0x8d, 0xe2, 0xed, 0xff, 0x25, 0xeb, 0x39, 0x77, 0x7c, 0x3e, 0x0a, 0x8d, 0xb0, 0xe2, + 0x23, 0xb0, 0xff, 0x50, 0xe5, 0x59, 0x55, 0xa5, 0x9b, 0xea, 0x4f, 0x81, 0x47, 0x06, 0x08, 0xe4, + 0x6b, 0xe8, 0xee, 0x96, 0xfc, 0xdc, 0x4b, 0xff, 0x22, 0xab, 0x73, 0xc2, 0xc0, 0x3e, 0xd4, 0xf5, + 0xec, 0x8c, 0x64, 0x57, 0x0a, 0x77, 0x6d, 0x25, 0x5f, 0x99, 0xd5, 0x84, 0xad, 0x4b, 0xb2, 0x78, + 0xae, 0x9d, 0x4a, 0x54, 0x8c, 0x43, 0x42, 0xff, 0x24, 0x0b, 0xe3, 0xfd, 0x82, 0xdd, 0xc3, 0x52, + 0x77, 0xbf, 0xf4, 0x7f, 0x9f, 0x16, 0xe0, 0x13, 0xfa, 0xd6, 0x19, 0x79, 0xd0, 0x77, 0x02, 0xbb, + 0xb1, 0x22, 0xba, 0xfd, 0x25, 0x51, 0x64, 0x4e, 0xa9, 0x1d, 0xee, 0x5e, 0x3e, 0x1f, 0xea, 0x92, + 0xa5, 0xf0, 0xb4, 0xf2, 0x52, 0x0c, 0x65, 0xe6, 0x5a, 0xa3, 0x76, 0x0b, 0x0f, 0x2b, 0xad, 0xc9, + 0x39, 0x26, 0x7a, 0x88, 0x9e, 0xf6, 0xe7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x88, 0x45, 0xb0, 0xca, + 0x25, 0x0b, 0x00, 0x00, } diff --git a/proto/ligato/vpp/vpp.proto b/proto/ligato/vpp/vpp.proto index 0c94979863..aeb203fa75 100644 --- a/proto/ligato/vpp/vpp.proto +++ b/proto/ligato/vpp/vpp.proto @@ -45,7 +45,6 @@ message ConfigData { repeated l3.L3XConnect l3xconnects = 45; repeated l3.DHCPProxy dhcp_proxies = 46; repeated l3.TeibEntry teib_entries = 47; - repeated l3.IP6ND ip6nds = 48; nat.Nat44Global nat44_global = 50; repeated nat.DNat44 dnat44s = 51; diff --git a/tests/integration/vpp/032_ip6nd_test.go b/tests/integration/vpp/032_ip6nd_test.go index afee74954d..cc0e87ea4f 100644 --- a/tests/integration/vpp/032_ip6nd_test.go +++ b/tests/integration/vpp/032_ip6nd_test.go @@ -21,14 +21,12 @@ import ( "go.ligato.io/cn-infra/v2/logging/logrus" - netalloc_mock "go.ligato.io/vpp-agent/v3/plugins/netalloc/mock" "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/ifaceidx" ifplugin_vppcalls "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin/vppcalls" - l3plugin_vppcalls "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/vppcalls" "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin/vrfidx" vpp_l3 "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" - _ "go.ligato.io/vpp-agent/v3/plugins/vpp/l3plugin" + _ "go.ligato.io/vpp-agent/v3/plugins/vpp/ifplugin" ) func TestIP6ND(t *testing.T) { @@ -56,10 +54,7 @@ func TestIP6ND(t *testing.T) { vrfIndexes.Put("vrf1-ipv4", &vrfidx.VRFMetadata{Index: 0, Protocol: vpp_l3.VrfTable_IPV4}) vrfIndexes.Put("vrf1-ipv6", &vrfidx.VRFMetadata{Index: 0, Protocol: vpp_l3.VrfTable_IPV6}) - h := l3plugin_vppcalls.CompatibleL3VppHandler(test.vppClient, ifIndexes, vrfIndexes, - netalloc_mock.NewMockNetAlloc(), logrus.NewLogger("test")) - - err = h.SetIP6ndAutoconfig(test.Ctx, ifName, true, true) + err = ih.SetIP6ndAutoconfig(test.Ctx, ifIdx, true, true) Expect(err).To(Succeed()) out, err := test.vpp.RunCli(test.Ctx, "show ip6 fib") From 95ac9d2db6de0bf9d5b730eb286d018feb08994d Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Tue, 14 Jul 2020 17:19:15 +0200 Subject: [PATCH 13/13] Compare IP6ND Signed-off-by: Ondrej Fabry --- plugins/vpp/ifplugin/descriptor/interface.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/vpp/ifplugin/descriptor/interface.go b/plugins/vpp/ifplugin/descriptor/interface.go index 463315621c..9f599e19df 100644 --- a/plugins/vpp/ifplugin/descriptor/interface.go +++ b/plugins/vpp/ifplugin/descriptor/interface.go @@ -273,6 +273,9 @@ func (d *InterfaceDescriptor) EquivalentInterfaces(key string, oldIntf, newIntf if !proto.Equal(oldIntf.Unnumbered, newIntf.Unnumbered) { return false } + if !proto.Equal(oldIntf.Ip6Nd, newIntf.Ip6Nd) { + return false + } // type-specific (defaults considered) if !d.equivalentTypeSpecificConfig(oldIntf, newIntf) {