diff options
author | Donatas Abraitis <donatas.abraitis@gmail.com> | 2021-05-24 09:55:03 +0300 |
---|---|---|
committer | Donatas Abraitis <donatas.abraitis@gmail.com> | 2021-05-24 09:55:03 +0300 |
commit | 94d720ff40644d09d99829d6a1520075b9f8475a (patch) | |
tree | 4fc816ce7ad55a140e81aec21018e1bd38ce5d9a /internal | |
parent | cbdb752b10847163d9f942853b67cf173b6aa151 (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')
-rw-r--r-- | internal/pkg/apiutil/capability.go | 13 |
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 } |