summaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/apiutil/capability.go
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas.abraitis@gmail.com>2021-05-24 09:55:03 +0300
committerDonatas Abraitis <donatas.abraitis@gmail.com>2021-05-24 09:55:03 +0300
commit94d720ff40644d09d99829d6a1520075b9f8475a (patch)
tree4fc816ce7ad55a140e81aec21018e1bd38ce5d9a /internal/pkg/apiutil/capability.go
parentcbdb752b10847163d9f942853b67cf173b6aa151 (diff)
Add FQDN capability
It's not kinda RFC (draft), but it's implemented and used in various other open-source software like FRRouting, Bird, ExaBGP. It's very handy when dealing with lots of peers. Exampe between GoBGP and FRRouting: ``` % ./cmd/gobgp/gobgp neighbor 192.168.10.123 | grep -A4 fqdn: fqdn: advertised and received Local: name: donatas-pc, domain: Remote: name: exit1-debian-9, domain: ``` ``` % vtysh -c 'show bgp neighbors 192.168.10.17 json' | jq .'"192.168.10.17".neighborCapabilities.hostName' { "advHostName": "exit1-debian-9", "advDomainName": "n/a", "rcvHostName": "donatas-pc", "rcvDomainName": "n/a" } ``` Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
Diffstat (limited to 'internal/pkg/apiutil/capability.go')
-rw-r--r--internal/pkg/apiutil/capability.go13
1 files changed, 13 insertions, 0 deletions
diff --git a/internal/pkg/apiutil/capability.go b/internal/pkg/apiutil/capability.go
index d135713a..125427db 100644
--- a/internal/pkg/apiutil/capability.go
+++ b/internal/pkg/apiutil/capability.go
@@ -110,6 +110,15 @@ func NewRouteRefreshCiscoCapability(a *bgp.CapRouteRefreshCisco) *api.RouteRefre
return &api.RouteRefreshCiscoCapability{}
}
+func NewFQDNCapability(a *bgp.CapFQDN) *api.FQDNCapability {
+ return &api.FQDNCapability{
+ HostNameLen: uint32(a.HostNameLen),
+ HostName: a.HostName,
+ DomainNameLen: uint32(a.DomainNameLen),
+ DomainName: a.DomainName,
+ }
+}
+
func NewUnknownCapability(a *bgp.CapUnknown) *api.UnknownCapability {
return &api.UnknownCapability{
Code: uint32(a.CapCode),
@@ -140,6 +149,8 @@ func MarshalCapability(value bgp.ParameterCapabilityInterface) (*any.Any, error)
m = NewLongLivedGracefulRestartCapability(n)
case *bgp.CapRouteRefreshCisco:
m = NewRouteRefreshCiscoCapability(n)
+ case *bgp.CapFQDN:
+ m = NewFQDNCapability(n)
case *bgp.CapUnknown:
m = NewUnknownCapability(n)
default:
@@ -227,6 +238,8 @@ func unmarshalCapability(a *any.Any) (bgp.ParameterCapabilityInterface, error) {
return bgp.NewCapLongLivedGracefulRestart(tuples), nil
case *api.RouteRefreshCiscoCapability:
return bgp.NewCapRouteRefreshCisco(), nil
+ case *api.FQDNCapability:
+ return bgp.NewCapFQDN(a.HostName, a.DomainName), nil
case *api.UnknownCapability:
return bgp.NewCapUnknown(bgp.BGPCapabilityCode(a.Code), a.Value), nil
}