summaryrefslogtreecommitdiffhomepage
path: root/packet
diff options
context:
space:
mode:
Diffstat (limited to 'packet')
-rw-r--r--packet/bgp.go66
-rw-r--r--packet/validate.go7
2 files changed, 58 insertions, 15 deletions
diff --git a/packet/bgp.go b/packet/bgp.go
index cc2166c2..debce3e5 100644
--- a/packet/bgp.go
+++ b/packet/bgp.go
@@ -25,22 +25,30 @@ import (
"reflect"
)
-// move somewhere else
-
const (
- AFI_IP = 1
- AFI_IP6 = 2
+ AFI_IP = 1
+ AFI_IP6 = 2
+ AFI_L2VPN = 25
)
const (
SAFI_UNICAST = 1
SAFI_MULTICAST = 2
SAFI_MPLS_LABEL = 4
+ SAFI_VPLS = 65
+ SAFI_EVPN = 70
SAFI_MPLS_VPN = 128
+ SAFI_MPLS_VPN_MULTICAST = 129
SAFI_ROUTE_TARGET_CONSTRTAINS = 132
)
const (
+ BGP_ORIGIN_ATTR_TYPE_IGP = 0
+ BGP_ORIGIN_ATTR_TYPE_EGP = 1
+ BGP_ORIGIN_ATTR_TYPE_INCOMPLETE = 2
+)
+
+const (
_ = iota
BGP_MSG_OPEN
BGP_MSG_UPDATE
@@ -954,15 +962,51 @@ func rfshift(afi uint16, safi uint8) RouteFamily {
type RouteFamily int
const (
- RF_IPv4_UC RouteFamily = AFI_IP<<16 | SAFI_UNICAST
- RF_IPv6_UC RouteFamily = AFI_IP6<<16 | SAFI_UNICAST
- RF_IPv4_VPN RouteFamily = AFI_IP<<16 | SAFI_MPLS_VPN
- RF_IPv6_VPN RouteFamily = AFI_IP6<<16 | SAFI_MPLS_VPN
- RF_IPv4_MPLS RouteFamily = AFI_IP<<16 | SAFI_MPLS_LABEL
- RF_IPv6_MPLS RouteFamily = AFI_IP6<<16 | SAFI_MPLS_LABEL
- RF_RTC_UC RouteFamily = AFI_IP<<16 | SAFI_ROUTE_TARGET_CONSTRTAINS
+ RF_IPv4_UC RouteFamily = AFI_IP<<16 | SAFI_UNICAST
+ RF_IPv6_UC RouteFamily = AFI_IP6<<16 | SAFI_UNICAST
+ RF_IPv4_MC RouteFamily = AFI_IP<<16 | SAFI_MULTICAST
+ RF_IPv6_MC RouteFamily = AFI_IP6<<16 | SAFI_MULTICAST
+ RF_IPv4_VPN RouteFamily = AFI_IP<<16 | SAFI_MPLS_VPN
+ RF_IPv6_VPN RouteFamily = AFI_IP6<<16 | SAFI_MPLS_VPN
+ RF_IPv4_VPN_MC RouteFamily = AFI_IP<<16 | SAFI_MPLS_VPN_MULTICAST
+ RF_IPv6_VPN_MC RouteFamily = AFI_IP6<<16 | SAFI_MPLS_VPN_MULTICAST
+ RF_IPv4_MPLS RouteFamily = AFI_IP<<16 | SAFI_MPLS_LABEL
+ RF_IPv6_MPLS RouteFamily = AFI_IP6<<16 | SAFI_MPLS_LABEL
+ RF_VPLS RouteFamily = AFI_L2VPN<<16 | SAFI_VPLS
+ RF_EVPN RouteFamily = AFI_L2VPN<<16 | SAFI_EVPN
+ RF_RTC_UC RouteFamily = AFI_IP<<16 | SAFI_ROUTE_TARGET_CONSTRTAINS
)
+func GetRouteFamily(name string) (RouteFamily, error) {
+ switch name {
+ case "ipv4-unicast":
+ return RF_IPv4_UC, nil
+ case "ipv6-unicast":
+ return RF_IPv6_UC, nil
+ case "ipv4-multicast":
+ return RF_IPv4_MC, nil
+ case "ipv6-multicast":
+ return RF_IPv6_MC, nil
+ case "ipv4-labelled-unicast":
+ return RF_IPv4_MPLS, nil
+ case "ipv6-labelled-unicast":
+ return RF_IPv6_MPLS, nil
+ case "l3vpn-ipv4-unicast":
+ return RF_IPv4_VPN, nil
+ case "l3vpn-ipv6-unicast":
+ return RF_IPv6_VPN, nil
+ case "l3vpn-ipv4-multicast":
+ return RF_IPv4_VPN_MC, nil
+ case "l3vpn-ipv6-multicast":
+ return RF_IPv6_VPN_MC, nil
+ case "l2vpn-vpls":
+ return RF_VPLS, nil
+ case "l2vpn-evpn":
+ return RF_EVPN, nil
+ }
+ return RouteFamily(0), fmt.Errorf("%s isn't a valid route family name", name)
+}
+
func routeFamilyPrefix(afi uint16, safi uint8) (prefix AddrPrefixInterface, err error) {
switch rfshift(afi, safi) {
case RF_IPv4_UC:
diff --git a/packet/validate.go b/packet/validate.go
index 143aefc9..b412ee8d 100644
--- a/packet/validate.go
+++ b/packet/validate.go
@@ -3,7 +3,6 @@ package bgp
import (
"encoding/binary"
"fmt"
- "github.com/osrg/gobgp/config"
"net"
"strconv"
)
@@ -104,9 +103,9 @@ func ValidateAttribute(a PathAttributeInterface, rfs []RouteFamily) (bool, error
}
case *PathAttributeOrigin:
v := uint8(p.Value[0])
- if v != config.BGP_ORIGIN_ATTR_TYPE_IGP &&
- v != config.BGP_ORIGIN_ATTR_TYPE_EGP &&
- v != config.BGP_ORIGIN_ATTR_TYPE_INCOMPLETE {
+ if v != BGP_ORIGIN_ATTR_TYPE_IGP &&
+ v != BGP_ORIGIN_ATTR_TYPE_EGP &&
+ v != BGP_ORIGIN_ATTR_TYPE_INCOMPLETE {
data, _ := a.Serialize()
eMsg := "invalid origin attribute. value : " + strconv.Itoa(int(v))
return false, NewMessageError(eCode, eSubCodeBadOrigin, data, eMsg)