summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAntoine Eiche <antoine.eiche@cloudwatt.com>2016-06-08 14:00:41 +0000
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2016-06-09 13:13:06 +0900
commit3d89b9245a6ccaa160de2e10c3ec57f966d62e2c (patch)
treed0a5e7bfe002a0e2d87da757d6d870c37cd153a2
parentd218ff032a590a7bbb493b97996e9d02fd5c2d57 (diff)
bgp: add Flat method on AddrPrefixInterface
This method returns a map[string]string which can be used to create structured outputs, specialized by implemented types.
-rw-r--r--packet/bgp/bgp.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/packet/bgp/bgp.go b/packet/bgp/bgp.go
index f89f547e..c01859fe 100644
--- a/packet/bgp/bgp.go
+++ b/packet/bgp/bgp.go
@@ -726,6 +726,10 @@ type AddrPrefixInterface interface {
Len() int
String() string
MarshalJSON() ([]byte, error)
+
+ // Create a flat map to describe attributes and their
+ // values. This can be used to create structured outputs.
+ Flat() map[string]string
}
type IPAddrPrefixDefault struct {
@@ -7075,3 +7079,45 @@ func NewMessageError(typeCode, subTypeCode uint8, data []byte, msg string) error
func (e *MessageError) Error() string {
return e.Message
}
+
+func (l *LabeledVPNIPAddrPrefix) Flat() map[string]string {
+ return map[string]string{
+ "Prefix": l.IPAddrPrefixDefault.Prefix.String(),
+ "PrefixLen": string(l.IPAddrPrefixDefault.Length - uint8(8*(l.Labels.Len()+l.RD.Len())))}
+}
+
+func (p *IPAddrPrefixDefault) Flat() map[string]string {
+ l := strings.Split(p.String(), "/")
+ if len(l) == 2 {
+ return map[string]string{
+ "Prefix": l[0],
+ "PrefixLen": l[1],
+ }
+ }
+ return map[string]string{}
+}
+
+func (l *EVPNNLRI) Flat() map[string]string {
+ return map[string]string{}
+}
+func (l *RouteTargetMembershipNLRI) Flat() map[string]string {
+ return map[string]string{}
+}
+func (l *FlowSpecIPv4Unicast) Flat() map[string]string {
+ return map[string]string{}
+}
+func (l *FlowSpecIPv4VPN) Flat() map[string]string {
+ return map[string]string{}
+}
+func (l *FlowSpecIPv6Unicast) Flat() map[string]string {
+ return map[string]string{}
+}
+func (l *FlowSpecIPv6VPN) Flat() map[string]string {
+ return map[string]string{}
+}
+func (l *FlowSpecL2VPN) Flat() map[string]string {
+ return map[string]string{}
+}
+func (l *OpaqueNLRI) Flat() map[string]string {
+ return map[string]string{}
+}