func encapParser(args []string) ([]bgp.ExtendedCommunityInterface, error) { if len(args) < 2 || args[0] != ExtCommNameMap[ENCAP] { return nil, fmt.Errorf("invalid encap") } var typ bgp.TunnelType switch args[1] { case "l2tpv3": typ = bgp.TUNNEL_TYPE_L2TP3 case "gre": typ = bgp.TUNNEL_TYPE_GRE case "ip-in-ip": typ = bgp.TUNNEL_TYPE_IP_IN_IP case "vxlan": typ = bgp.TUNNEL_TYPE_VXLAN case "nvgre": typ = bgp.TUNNEL_TYPE_NVGRE case "mpls": typ = bgp.TUNNEL_TYPE_MPLS case "mpls-in-gre": typ = bgp.TUNNEL_TYPE_MPLS_IN_GRE case "vxlan-gre": typ = bgp.TUNNEL_TYPE_VXLAN_GRE default: return nil, fmt.Errorf("invalid encap type") } isTransitive := true o := bgp.NewOpaqueExtended(isTransitive) o.SubType = bgp.EC_SUBTYPE_ENCAPSULATION o.Value = &bgp.EncapExtended{typ} return []bgp.ExtendedCommunityInterface{o}, nil }
func validationParser(args []string) ([]bgp.ExtendedCommunityInterface, error) { if len(args) < 1 { return nil, fmt.Errorf("invalid validation state") } var typ bgp.ValidationState switch args[0] { case "valid": typ = bgp.VALIDATION_STATE_VALID case "not-found": typ = bgp.VALIDATION_STATE_NOT_FOUND case "invalid": typ = bgp.VALIDATION_STATE_INVALID default: return nil, fmt.Errorf("invalid validation state") } isTransitive := false o := bgp.NewOpaqueExtended(isTransitive) o.SubType = bgp.EC_SUBTYPE_ORIGIN_VALIDATION o.Value = &bgp.ValidationExtended{typ} return []bgp.ExtendedCommunityInterface{o}, nil }