Refactoring Zebra and supporting frr7.3

- Change const values to camel case from snake case to make zero golint's warnigns
- Introduce convert functions (toEach, toCommon) between the newest version to older versions
- Merge code about decode nexthop to reduce lines of code
- Add frr7.3 statemet in allowable software for config
- Rename and Update generated file by stringer
This commit is contained in:
Hitoshi Irino
2020-04-26 07:43:50 +09:00
parent f11b9c7afb
commit cf572bc5fc
26 changed files with 2990 additions and 3113 deletions
+1 -1
View File
@@ -422,7 +422,7 @@ func setDefaultConfigValuesWithViper(v *viper.Viper, b *BgpConfigSet) error {
}
//SoftwareName for Zebra
allowableZebraSoftwareName := []string{"", "quagga", "frr3", "frr4", "frr5", "frr6", "frr7", "frr7.1", "frr7.2", "cumulus"}
allowableZebraSoftwareName := []string{"", "quagga", "frr3", "frr4", "frr5", "frr6", "frr7", "frr7.1", "frr7.2", "frr7.3", "cumulus"}
isAllowable := false
for _, allowable := range allowableZebraSoftwareName {
if b.Zebra.Config.SoftwareName == allowable {
+21 -11
View File
@@ -1,17 +1,27 @@
// Code generated by "stringer -type=AFI"; DO NOT EDIT.
// Code generated by "stringer -type=afi"; DO NOT EDIT.
package zebra
import "strconv"
const _AFI_name = "AFI_IPAFI_IP6AFI_ETHERAFI_MAX"
var _AFI_index = [...]uint8{0, 6, 13, 22, 29}
func (i AFI) String() string {
i -= 1
if i >= AFI(len(_AFI_index)-1) {
return "AFI(" + strconv.FormatInt(int64(i+1), 10) + ")"
}
return _AFI_name[_AFI_index[i]:_AFI_index[i+1]]
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[afiIP-1]
_ = x[afiIP6-2]
_ = x[afiEther-3]
_ = x[afiMax-4]
}
const _afi_name = "afiIPafiIP6afiEtherafiMax"
var _afi_index = [...]uint8{0, 5, 11, 19, 25}
func (i afi) String() string {
i -= 1
if i >= afi(len(_afi_index)-1) {
return "afi(" + strconv.FormatInt(int64(i+1), 10) + ")"
}
return _afi_name[_afi_index[i]:_afi_index[i+1]]
}
-16
View File
@@ -1,16 +0,0 @@
// Code generated by "stringer -type=API_TYPE"; DO NOT EDIT.
package zebra
import "strconv"
const _API_TYPE_name = "FRR_ZAPI6_INTERFACE_ADDFRR_ZAPI6_INTERFACE_DELETEFRR_ZAPI6_INTERFACE_ADDRESS_ADDFRR_ZAPI6_INTERFACE_ADDRESS_DELETEFRR_ZAPI6_INTERFACE_UPFRR_ZAPI6_INTERFACE_DOWNFRR_ZAPI6_INTERFACE_SET_MASTERFRR_ZAPI6_ROUTE_ADDFRR_ZAPI6_ROUTE_DELETEFRR_ZAPI6_ROUTE_NOTIFY_OWNERFRR_ZAPI6_REDISTRIBUTE_ADDFRR_ZAPI6_REDISTRIBUTE_DELETEFRR_ZAPI6_REDISTRIBUTE_DEFAULT_ADDFRR_ZAPI6_REDISTRIBUTE_DEFAULT_DELETEFRR_ZAPI6_ROUTER_ID_ADDFRR_ZAPI6_ROUTER_ID_DELETEFRR_ZAPI6_ROUTER_ID_UPDATEFRR_ZAPI6_HELLOFRR_ZAPI6_CAPABILITIESFRR_ZAPI6_NEXTHOP_REGISTERFRR_ZAPI6_NEXTHOP_UNREGISTERFRR_ZAPI6_NEXTHOP_UPDATEFRR_ZAPI6_INTERFACE_NBR_ADDRESS_ADDFRR_ZAPI6_INTERFACE_NBR_ADDRESS_DELETEFRR_ZAPI6_INTERFACE_BFD_DEST_UPDATEFRR_ZAPI6_IMPORT_ROUTE_REGISTERFRR_ZAPI6_IMPORT_ROUTE_UNREGISTERFRR_ZAPI6_IMPORT_CHECK_UPDATEFRR_ZAPI6_IPV4_ROUTE_IPV6_NEXTHOP_ADDFRR_ZAPI6_BFD_DEST_REGISTERFRR_ZAPI6_BFD_DEST_DEREGISTERFRR_ZAPI6_BFD_DEST_UPDATEFRR_ZAPI6_BFD_DEST_REPLAYFRR_ZAPI6_REDISTRIBUTE_ROUTE_ADDFRR_ZAPI6_REDISTRIBUTE_ROUTE_DELFRR_ZAPI6_VRF_UNREGISTERFRR_ZAPI6_VRF_ADDFRR_ZAPI6_VRF_DELETEFRR_ZAPI6_VRF_LABELFRR_ZAPI6_INTERFACE_VRF_UPDATEFRR_ZAPI6_BFD_CLIENT_REGISTERFRR_ZAPI6_BFD_CLIENT_DEREGISTERFRR_ZAPI6_INTERFACE_ENABLE_RADVFRR_ZAPI6_INTERFACE_DISABLE_RADVFRR_ZAPI6_IPV4_NEXTHOP_LOOKUP_MRIBFRR_ZAPI6_INTERFACE_LINK_PARAMSFRR_ZAPI6_MPLS_LABELS_ADDFRR_ZAPI6_MPLS_LABELS_DELETEFRR_ZAPI6_IPMR_ROUTE_STATSFRR_ZAPI6_LABEL_MANAGER_CONNECTFRR_ZAPI6_LABEL_MANAGER_CONNECT_ASYNCFRR_ZAPI6_GET_LABEL_CHUNKFRR_ZAPI6_RELEASE_LABEL_CHUNKFRR_ZAPI6_FEC_REGISTERFRR_ZAPI6_FEC_UNREGISTERFRR_ZAPI6_FEC_UPDATEFRR_ZAPI6_ADVERTISE_DEFAULT_GWFRR_ZAPI6_ADVERTISE_SUBNETFRR_ZAPI6_ADVERTISE_ALL_VNIFRR_ZAPI6_LOCAL_ES_ADDFRR_ZAPI6_LOCAL_ES_DELFRR_ZAPI6_VNI_ADDFRR_ZAPI6_VNI_DELFRR_ZAPI6_L3VNI_ADDFRR_ZAPI6_L3VNI_DELFRR_ZAPI6_REMOTE_VTEP_ADDFRR_ZAPI6_REMOTE_VTEP_DELFRR_ZAPI6_MACIP_ADDFRR_ZAPI6_MACIP_DELFRR_ZAPI6_IP_PREFIX_ROUTE_ADDFRR_ZAPI6_IP_PREFIX_ROUTE_DELFRR_ZAPI6_REMOTE_MACIP_ADDFRR_ZAPI6_REMOTE_MACIP_DELFRR_ZAPI6_PW_ADDFRR_ZAPI6_PW_DELETEFRR_ZAPI6_PW_SETFRR_ZAPI6_PW_UNSETFRR_ZAPI6_PW_STATUS_UPDATEFRR_ZAPI6_RULE_ADDFRR_ZAPI6_RULE_DELETEFRR_ZAPI6_RULE_NOTIFY_OWNERFRR_ZAPI6_TABLE_MANAGER_CONNECTFRR_ZAPI6_GET_TABLE_CHUNKFRR_ZAPI6_RELEASE_TABLE_CHUNKFRR_ZAPI6_IPSET_CREATEFRR_ZAPI6_IPSET_DESTROYFRR_ZAPI6_IPSET_ENTRY_ADDFRR_ZAPI6_IPSET_ENTRY_DELETEFRR_ZAPI6_IPSET_NOTIFY_OWNERFRR_ZAPI6_IPSET_ENTRY_NOTIFY_OWNERFRR_ZAPI6_IPTABLE_ADDFRR_ZAPI6_IPTABLE_DELETEFRR_ZAPI6_IPTABLE_NOTIFY_OWNERFRR_ZAPI5_IPTABLE_NOTIFY_OWNER"
var _API_TYPE_index = [...]uint16{0, 23, 49, 80, 114, 136, 160, 190, 209, 231, 259, 285, 314, 348, 385, 408, 434, 460, 475, 497, 523, 551, 575, 610, 648, 683, 714, 747, 776, 813, 840, 869, 894, 919, 951, 983, 1007, 1024, 1044, 1063, 1093, 1122, 1153, 1184, 1216, 1250, 1281, 1306, 1334, 1360, 1391, 1428, 1453, 1482, 1504, 1528, 1548, 1578, 1604, 1631, 1653, 1675, 1692, 1709, 1728, 1747, 1772, 1797, 1816, 1835, 1864, 1893, 1919, 1945, 1961, 1980, 1996, 2014, 2040, 2058, 2079, 2106, 2137, 2162, 2191, 2213, 2236, 2261, 2289, 2317, 2351, 2372, 2396, 2426, 2456}
func (i API_TYPE) String() string {
if i >= API_TYPE(len(_API_TYPE_index)-1) {
return "API_TYPE(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _API_TYPE_name[_API_TYPE_index[i]:_API_TYPE_index[i+1]]
}
+223
View File
@@ -0,0 +1,223 @@
// Code generated by "stringer -type=APIType"; DO NOT EDIT.
package zebra
import "strconv"
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[interfaceAdd-0]
_ = x[interfaceDelete-1]
_ = x[interfaceAddressAdd-2]
_ = x[interfaceAddressDelete-3]
_ = x[interfaceUp-4]
_ = x[interfaceDown-5]
_ = x[_interfaceSetMaster-6]
_ = x[_interfaceSetProtoDown-7]
_ = x[RouteAdd-8]
_ = x[RouteDelete-9]
_ = x[_routeNotifyOwner-10]
_ = x[redistributeAdd-11]
_ = x[_redistributeDelete-12]
_ = x[_redistributeDefaultAdd-13]
_ = x[_redistributeDefaultDelete-14]
_ = x[routerIDAdd-15]
_ = x[_routerIDDelete-16]
_ = x[routerIDUpdate-17]
_ = x[hello-18]
_ = x[_capabilities-19]
_ = x[nexthopRegister-20]
_ = x[nexthopUnregister-21]
_ = x[nexthopUpdate-22]
_ = x[_interfaceNBRAddressAdd-23]
_ = x[_interfaceNBRAddressDelete-24]
_ = x[_interfaceBFDDestUpdate-25]
_ = x[_importRouteRegister-26]
_ = x[_importRouteUnregister-27]
_ = x[_importCheckUpdate-28]
_ = x[_bfdDestRegister-29]
_ = x[_bfdDestDeregister-30]
_ = x[_bfdDestUpdate-31]
_ = x[_bfdDestReplay-32]
_ = x[redistributeRouteAdd-33]
_ = x[redistributeRouteDel-34]
_ = x[_vrfUnregister-35]
_ = x[_vrfAdd-36]
_ = x[_vrfDelete-37]
_ = x[vrfLabel-38]
_ = x[_interfaceVRFUpdate-39]
_ = x[_bfdClientRegister-40]
_ = x[_bfdClientDeregister-41]
_ = x[_interfaceEnableRADV-42]
_ = x[_interfaceDisableRADV-43]
_ = x[ipv4NexthopLookupMRIB-44]
_ = x[_interfaceLinkParams-45]
_ = x[_mplsLabelsAdd-46]
_ = x[_mplsLabelsDelete-47]
_ = x[_mplsLabelsReplace-48]
_ = x[_ipmrRouteStats-49]
_ = x[labelManagerConnect-50]
_ = x[labelManagerConnectAsync-51]
_ = x[getLabelChunk-52]
_ = x[releaseLabelChunk-53]
_ = x[_fecRegister-54]
_ = x[_fecUnregister-55]
_ = x[_fecUpdate-56]
_ = x[_advertiseDefaultGW-57]
_ = x[_advertiseSviMACIP-58]
_ = x[_advertiseSubnet-59]
_ = x[_advertiseAllVNI-60]
_ = x[_localESAdd-61]
_ = x[_localESDel-62]
_ = x[_vniAdd-63]
_ = x[_vniDel-64]
_ = x[_l3VNIAdd-65]
_ = x[_l3VNIDel-66]
_ = x[_remoteVTEPAdd-67]
_ = x[_remoteVTEPDel-68]
_ = x[_macIPAdd-69]
_ = x[_macIPDel-70]
_ = x[_ipPrefixRouteAdd-71]
_ = x[_ipPrefixRouteDel-72]
_ = x[_remoteMACIPAdd-73]
_ = x[_remoteMACIPDel-74]
_ = x[_duplicateAddrDetection-75]
_ = x[_pwAdd-76]
_ = x[_pwDelete-77]
_ = x[_pwSet-78]
_ = x[_pwUnset-79]
_ = x[_pwStatusUpdate-80]
_ = x[_ruleAdd-81]
_ = x[_ruleDelete-82]
_ = x[_ruleNotifyOwner-83]
_ = x[_tableManagerConnect-84]
_ = x[_getTableChunk-85]
_ = x[_releaseTableChunk-86]
_ = x[_ipSetCreate-87]
_ = x[_ipSetDestroy-88]
_ = x[_ipSetEntryAdd-89]
_ = x[_ipSetEntryDelete-90]
_ = x[_ipSetNotifyOwner-91]
_ = x[_ipSetEntryNotifyOwner-92]
_ = x[_ipTableAdd-93]
_ = x[_ipTableDelete-94]
_ = x[_ipTableNotifyOwner-95]
_ = x[_vxlanFloodControl-96]
_ = x[_vxlanSgAdd-97]
_ = x[_vxlanSgDel-98]
_ = x[_vxlanSgReplay-99]
_ = x[_mlagProcessUp-100]
_ = x[_mlagProcessDown-101]
_ = x[_mlagClientRegister-102]
_ = x[_mlagClientUnregister-103]
_ = x[_mlagClientForwardMsg-104]
_ = x[zebraError-105]
_ = x[BackwardIPv6RouteAdd-106]
_ = x[BackwardIPv6RouteDelete-107]
_ = x[zapi6Frr7dot2MinDifferentAPIType-48]
_ = x[zapi5ClMinDifferentAPIType-19]
_ = x[zapi5MinDifferentAPIType-7]
_ = x[zapi4MinDifferentAPIType-6]
_ = x[zapi3MinDifferentAPIType-0]
_ = x[zapi6Frr7dot2LabelManagerConnect-49]
_ = x[zapi6Frr7dot2LabelManagerConnectAsync-50]
_ = x[zapi6Frr7dot2GetLabelChunk-51]
_ = x[zapi6Frr7dot2ReleaseLabelChunk-52]
_ = x[zapi6Frr7RouteAdd-7]
_ = x[zapi6Frr7RouteDelete-8]
_ = x[zapi6Frr7RedistributAdd-10]
_ = x[zapi6Frr7RouterIDAdd-14]
_ = x[zapi6Frr7RouterIDUpdate-16]
_ = x[zapi6Frr7Hello-17]
_ = x[zapi6Frr7NexthopRegister-19]
_ = x[zapi6Frr7NexthopUnregister-20]
_ = x[zapi6Frr7NexthopUpdate-21]
_ = x[zapi6Frr7RedistributeRouteAdd-32]
_ = x[zapi6Frr7RedistributeRouteDel-33]
_ = x[zapi6Frr7VrfLabel-37]
_ = x[zapi6Frr7Ipv4NexthopLookupMRIB-43]
_ = x[zapi6Frr7LabelManagerConnect-48]
_ = x[zapi6Frr7LabelManagerConnectAsync-49]
_ = x[zapi6Frr7GetLabelChunk-50]
_ = x[zapi6Frr7ReleaseLabelChunk-51]
_ = x[zapi5ClIpv4NexthopLookupMRIB-42]
_ = x[zapi5ClLabelManagerConnect-47]
_ = x[zapi5ClGetLabelChunk-48]
_ = x[zapi5ClReleaseLabelChunk-49]
_ = x[zapi5RedistributAdd-14]
_ = x[zapi5RouterIDAdd-18]
_ = x[zapi5RouterIDUpdate-20]
_ = x[zapi5Hello-21]
_ = x[zapi5Frr5NexthopRegister-23]
_ = x[zapi5Frr5NexthopUnregister-24]
_ = x[zapi5Frr5NexthopUpdate-25]
_ = x[zapi5Frr5RedistributeRouteAdd-37]
_ = x[zapi5Frr5RedistributeRouteDel-38]
_ = x[zapi5Frr5VrfLabel-42]
_ = x[zapi5Frr5Ipv4NexthopLookupMRIB-47]
_ = x[zapi5Frr5LabelManagerConnect-52]
_ = x[zapi5Frr5LabelManagerConnectAsync-53]
_ = x[zapi5Frr5GetLabelChunk-54]
_ = x[zapi5Frr5ReleaseLabelChunk-55]
_ = x[zapi5Frr4NexthopRegister-22]
_ = x[zapi5Frr4NexthopUnregister-23]
_ = x[zapi5Frr4NexthopUpdate-24]
_ = x[zapi5Frr4RedistributeRouteAdd-36]
_ = x[zapi5Frr4RedistributeRouteDel-37]
_ = x[zapi5Frr4Ipv4NexthopLookupMRIB-45]
_ = x[zapi5Frr4LabelManagerConnect-50]
_ = x[zapi5Frr4GetLabelChunk-51]
_ = x[zapi5Frr4ReleaseLabelChunk-52]
_ = x[zapi4IPv4RouteAdd-6]
_ = x[zapi4IPv4RouteDelete-7]
_ = x[zapi4IPv6RouteAdd-8]
_ = x[zapi4IPv6RouteDelete-9]
_ = x[zapi4RedistributAdd-10]
_ = x[zapi4RouterIDAdd-14]
_ = x[zapi4RouterIDUpdate-16]
_ = x[zapi4Hello-17]
_ = x[zapi4NexthopRegister-18]
_ = x[zapi4NexthopUnregister-19]
_ = x[zapi4NexthopUpdate-20]
_ = x[zapi4RedistributeIPv4Add-32]
_ = x[zapi4RedistributeIPv4Del-33]
_ = x[zapi4RedistributeIPv6Add-34]
_ = x[zapi4RedistributeIPv6Del-35]
_ = x[zapi4LabelManagerConnect-52]
_ = x[zapi4GetLabelChunk-53]
_ = x[zapi4ReleaseLabelChunk-54]
_ = x[zapi3InterfaceAdd-1]
_ = x[zapi3InterfaceDelete-2]
_ = x[zapi3InterfaceAddressAdd-3]
_ = x[zapi3InterfaceAddressDelete-4]
_ = x[zapi3InterfaceUp-5]
_ = x[zapi3InterfaceDown-6]
_ = x[zapi3IPv4RouteAdd-7]
_ = x[zapi3IPv4RouteDelete-8]
_ = x[zapi3IPv6RouteAdd-9]
_ = x[zapi3IPv6RouteDelete-10]
_ = x[zapi3RedistributeAdd-11]
_ = x[zapi3IPv4NexthopLookup-15]
_ = x[zapi3IPv6NexthopLookup-16]
_ = x[zapi3IPv4ImportLookup-17]
_ = x[zapi3RouterIDAdd-20]
_ = x[zapi3RouterIDUpdate-22]
_ = x[zapi3Hello-23]
_ = x[zapi3Ipv4NexthopLookupMRIB-24]
_ = x[zapi3NexthopRegister-27]
_ = x[zapi3NexthopUnregister-28]
_ = x[zapi3NexthopUpdate-29]
}
const _APIType_name = "interfaceAddinterfaceDeleteinterfaceAddressAddinterfaceAddressDeleteinterfaceUpinterfaceDown_interfaceSetMaster_interfaceSetProtoDownRouteAddRouteDelete_routeNotifyOwnerredistributeAdd_redistributeDelete_redistributeDefaultAdd_redistributeDefaultDeleterouterIDAdd_routerIDDeleterouterIDUpdatehello_capabilitiesnexthopRegisternexthopUnregisternexthopUpdate_interfaceNBRAddressAdd_interfaceNBRAddressDelete_interfaceBFDDestUpdate_importRouteRegister_importRouteUnregister_importCheckUpdate_bfdDestRegister_bfdDestDeregister_bfdDestUpdate_bfdDestReplayredistributeRouteAddredistributeRouteDel_vrfUnregister_vrfAdd_vrfDeletevrfLabel_interfaceVRFUpdate_bfdClientRegister_bfdClientDeregister_interfaceEnableRADV_interfaceDisableRADVipv4NexthopLookupMRIB_interfaceLinkParams_mplsLabelsAdd_mplsLabelsDelete_mplsLabelsReplace_ipmrRouteStatslabelManagerConnectlabelManagerConnectAsyncgetLabelChunkreleaseLabelChunk_fecRegister_fecUnregister_fecUpdate_advertiseDefaultGW_advertiseSviMACIP_advertiseSubnet_advertiseAllVNI_localESAdd_localESDel_vniAdd_vniDel_l3VNIAdd_l3VNIDel_remoteVTEPAdd_remoteVTEPDel_macIPAdd_macIPDel_ipPrefixRouteAdd_ipPrefixRouteDel_remoteMACIPAdd_remoteMACIPDel_duplicateAddrDetection_pwAdd_pwDelete_pwSet_pwUnset_pwStatusUpdate_ruleAdd_ruleDelete_ruleNotifyOwner_tableManagerConnect_getTableChunk_releaseTableChunk_ipSetCreate_ipSetDestroy_ipSetEntryAdd_ipSetEntryDelete_ipSetNotifyOwner_ipSetEntryNotifyOwner_ipTableAdd_ipTableDelete_ipTableNotifyOwner_vxlanFloodControl_vxlanSgAdd_vxlanSgDel_vxlanSgReplay_mlagProcessUp_mlagProcessDown_mlagClientRegister_mlagClientUnregister_mlagClientForwardMsgzebraErrorBackwardIPv6RouteAddBackwardIPv6RouteDelete"
var _APIType_index = [...]uint16{0, 12, 27, 46, 68, 79, 92, 111, 133, 141, 152, 169, 184, 203, 226, 252, 263, 278, 292, 297, 310, 325, 342, 355, 378, 404, 427, 447, 469, 487, 503, 521, 535, 549, 569, 589, 603, 610, 620, 628, 647, 665, 685, 705, 726, 747, 767, 781, 798, 816, 831, 850, 874, 887, 904, 916, 930, 940, 959, 977, 993, 1009, 1020, 1031, 1038, 1045, 1054, 1063, 1077, 1091, 1100, 1109, 1126, 1143, 1158, 1173, 1196, 1202, 1211, 1217, 1225, 1240, 1248, 1259, 1275, 1295, 1309, 1327, 1339, 1352, 1366, 1383, 1400, 1422, 1433, 1447, 1466, 1484, 1495, 1506, 1520, 1534, 1550, 1569, 1590, 1611, 1621, 1641, 1664}
func (i APIType) String() string {
if i >= APIType(len(_APIType_index)-1) {
return "APIType(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _APIType_name[_APIType_index[i]:_APIType_index[i+1]]
}
-16
View File
@@ -1,16 +0,0 @@
// Code generated by "stringer -type=LINK_TYPE"; DO NOT EDIT.
package zebra
import "strconv"
const _LINK_TYPE_name = "LINK_TYPE_UNKNOWNLINK_TYPE_ETHERLINK_TYPE_EETHERLINK_TYPE_AX25LINK_TYPE_PRONETLINK_TYPE_IEEE802LINK_TYPE_ARCNETLINK_TYPE_APPLETLKLINK_TYPE_DLCILINK_TYPE_ATMLINK_TYPE_METRICOMLINK_TYPE_IEEE1394LINK_TYPE_EUI64LINK_TYPE_INFINIBANDLINK_TYPE_SLIPLINK_TYPE_CSLIPLINK_TYPE_SLIP6LINK_TYPE_CSLIP6LINK_TYPE_RSRVDLINK_TYPE_ADAPTLINK_TYPE_ROSELINK_TYPE_X25LINK_TYPE_PPPLINK_TYPE_CHDLCLINK_TYPE_LAPBLINK_TYPE_RAWHDLCLINK_TYPE_IPIPLINK_TYPE_IPIP6LINK_TYPE_FRADLINK_TYPE_SKIPLINK_TYPE_LOOPBACKLINK_TYPE_LOCALTLKLINK_TYPE_FDDILINK_TYPE_SITLINK_TYPE_IPDDPLINK_TYPE_IPGRELINK_TYPE_IP6GRELINK_TYPE_PIMREGLINK_TYPE_HIPPILINK_TYPE_ECONETLINK_TYPE_IRDALINK_TYPE_FCPPLINK_TYPE_FCALLINK_TYPE_FCPLLINK_TYPE_FCFABRICLINK_TYPE_IEEE802_TRLINK_TYPE_IEEE80211LINK_TYPE_IEEE80211_RADIOTAPLINK_TYPE_IEEE802154LINK_TYPE_IEEE802154_PHY"
var _LINK_TYPE_index = [...]uint16{0, 17, 32, 48, 62, 78, 95, 111, 129, 143, 156, 174, 192, 207, 227, 241, 256, 271, 287, 302, 317, 331, 344, 357, 372, 386, 403, 417, 432, 446, 460, 478, 496, 510, 523, 538, 553, 569, 585, 600, 616, 630, 644, 658, 672, 690, 710, 729, 757, 777, 801}
func (i LINK_TYPE) String() string {
if i >= LINK_TYPE(len(_LINK_TYPE_index)-1) {
return "LINK_TYPE(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _LINK_TYPE_name[_LINK_TYPE_index[i]:_LINK_TYPE_index[i+1]]
}
+72
View File
@@ -0,0 +1,72 @@
// Code generated by "stringer -type=linkType"; DO NOT EDIT.
package zebra
import "strconv"
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[linkTypeUnknown-0]
_ = x[linkTypeEther-1]
_ = x[linkTypeEEther-2]
_ = x[linkTypeAX25-3]
_ = x[linkTypePRONET-4]
_ = x[linkTypeIeee802-5]
_ = x[linkTypeARCNET-6]
_ = x[linkTypeAPPLETLK-7]
_ = x[linkTypeDLCI-8]
_ = x[linkTypeATM-9]
_ = x[linkTypeMetricOM-10]
_ = x[linkTypeIeee1394-11]
_ = x[linkTypeEUI64-12]
_ = x[linkTypeINFINIBAND-13]
_ = x[linkTypeSLIP-14]
_ = x[linkTypeCSLIP-15]
_ = x[linkTypeSLIP6-16]
_ = x[linkTypeCSLIP6-17]
_ = x[linkTypeRSRVD-18]
_ = x[linkTypeADAPT-19]
_ = x[linkTypeROSE-20]
_ = x[linkTypeX25-21]
_ = x[linkTypePPP-22]
_ = x[linkTypeCHDLC-23]
_ = x[linkTypeLAPB-24]
_ = x[linkTypeRAWHDLC-25]
_ = x[linkTypeIPIP-26]
_ = x[linkTypeIPIP6-27]
_ = x[linkTypeFRAD-28]
_ = x[linkTypeSKIP-29]
_ = x[linkTypeLOOPBACK-30]
_ = x[linkTypeLOCALTLK-31]
_ = x[linkTypeFDDI-32]
_ = x[linkTypeSIT-33]
_ = x[linkTypeIPDDP-34]
_ = x[linkTypeIPGRE-35]
_ = x[linkTypeIP6GRE-36]
_ = x[linkTypePIMREG-37]
_ = x[linkTypeHIPPI-38]
_ = x[linkTypeECONET-39]
_ = x[linkTypeIRDA-40]
_ = x[linkTypeFCPP-41]
_ = x[linkTypeFCAL-42]
_ = x[linkTypeFCPL-43]
_ = x[linkTypeFCFABRIC-44]
_ = x[linkTypeIeee802Tr-45]
_ = x[linkTypeIeee80211-46]
_ = x[linkTypeIeee80211RadioTap-47]
_ = x[linkTypeIeee802154-48]
_ = x[linkTypeIeee802154Phy-49]
}
const _linkType_name = "linkTypeUnknownlinkTypeEtherlinkTypeEEtherlinkTypeAX25linkTypePRONETlinkTypeIeee802linkTypeARCNETlinkTypeAPPLETLKlinkTypeDLCIlinkTypeATMlinkTypeMetricOMlinkTypeIeee1394linkTypeEUI64linkTypeINFINIBANDlinkTypeSLIPlinkTypeCSLIPlinkTypeSLIP6linkTypeCSLIP6linkTypeRSRVDlinkTypeADAPTlinkTypeROSElinkTypeX25linkTypePPPlinkTypeCHDLClinkTypeLAPBlinkTypeRAWHDLClinkTypeIPIPlinkTypeIPIP6linkTypeFRADlinkTypeSKIPlinkTypeLOOPBACKlinkTypeLOCALTLKlinkTypeFDDIlinkTypeSITlinkTypeIPDDPlinkTypeIPGRElinkTypeIP6GRElinkTypePIMREGlinkTypeHIPPIlinkTypeECONETlinkTypeIRDAlinkTypeFCPPlinkTypeFCALlinkTypeFCPLlinkTypeFCFABRIClinkTypeIeee802TrlinkTypeIeee80211linkTypeIeee80211RadioTaplinkTypeIeee802154linkTypeIeee802154Phy"
var _linkType_index = [...]uint16{0, 15, 28, 42, 54, 68, 83, 97, 113, 125, 136, 152, 168, 181, 199, 211, 224, 237, 251, 264, 277, 289, 300, 311, 324, 336, 351, 363, 376, 388, 400, 416, 432, 444, 455, 468, 481, 495, 509, 522, 536, 548, 560, 572, 584, 600, 617, 634, 659, 677, 698}
func (i linkType) String() string {
if i >= linkType(len(_linkType_index)-1) {
return "linkType(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _linkType_name[_linkType_index[i]:_linkType_index[i+1]]
}
-16
View File
@@ -1,16 +0,0 @@
// Code generated by "stringer -type=LSP_TYPE"; DO NOT EDIT.
package zebra
import "strconv"
const _LSP_TYPE_name = "LSP_NONELSP_STATICLSP_LDPLSP_BGPLSP_SRLSP_SHARP"
var _LSP_TYPE_index = [...]uint8{0, 8, 18, 25, 32, 38, 47}
func (i LSP_TYPE) String() string {
if i >= LSP_TYPE(len(_LSP_TYPE_index)-1) {
return "LSP_TYPE(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _LSP_TYPE_name[_LSP_TYPE_index[i]:_LSP_TYPE_index[i+1]]
}
+28
View File
@@ -0,0 +1,28 @@
// Code generated by "stringer -type=lspTYPE"; DO NOT EDIT.
package zebra
import "strconv"
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[lspNone-0]
_ = x[lspStatic-1]
_ = x[lspLDP-2]
_ = x[lspBGP-3]
_ = x[lspSR-4]
_ = x[lspSHARP-5]
}
const _lspTYPE_name = "lspNonelspStaticlspLDPlspBGPlspSRlspSHARP"
var _lspTYPE_index = [...]uint8{0, 7, 16, 22, 28, 33, 41}
func (i lspTYPE) String() string {
if i >= lspTYPE(len(_lspTYPE_index)-1) {
return "lspTYPE(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _lspTYPE_name[_lspTYPE_index[i]:_lspTYPE_index[i+1]]
}
-41
View File
@@ -1,41 +0,0 @@
// Code generated by "stringer -type=NEXTHOP_FLAG"; DO NOT EDIT.
package zebra
import "strconv"
const (
_NEXTHOP_FLAG_name_0 = "NEXTHOP_FLAG_ACTIVENEXTHOP_FLAG_FIB"
_NEXTHOP_FLAG_name_1 = "NEXTHOP_FLAG_RECURSIVE"
_NEXTHOP_FLAG_name_2 = "NEXTHOP_FLAG_ONLINK"
_NEXTHOP_FLAG_name_3 = "NEXTHOP_FLAG_MATCHED"
_NEXTHOP_FLAG_name_4 = "NEXTHOP_FLAG_FILTERED"
_NEXTHOP_FLAG_name_5 = "NEXTHOP_FLAG_DUPLICATE"
_NEXTHOP_FLAG_name_6 = "NEXTHOP_FLAG_EVPN_RVTEP"
)
var (
_NEXTHOP_FLAG_index_0 = [...]uint8{0, 19, 35}
)
func (i NEXTHOP_FLAG) String() string {
switch {
case 1 <= i && i <= 2:
i -= 1
return _NEXTHOP_FLAG_name_0[_NEXTHOP_FLAG_index_0[i]:_NEXTHOP_FLAG_index_0[i+1]]
case i == 4:
return _NEXTHOP_FLAG_name_1
case i == 8:
return _NEXTHOP_FLAG_name_2
case i == 16:
return _NEXTHOP_FLAG_name_3
case i == 32:
return _NEXTHOP_FLAG_name_4
case i == 64:
return _NEXTHOP_FLAG_name_5
case i == 128:
return _NEXTHOP_FLAG_name_6
default:
return "NEXTHOP_FLAG(" + strconv.FormatInt(int64(i), 10) + ")"
}
}
-17
View File
@@ -1,17 +0,0 @@
// Code generated by "stringer -type=NEXTHOP_TYPE"; DO NOT EDIT.
package zebra
import "strconv"
const _NEXTHOP_TYPE_name = "FRR_NEXTHOP_TYPE_IFINDEXFRR_NEXTHOP_TYPE_IPV4FRR_NEXTHOP_TYPE_IPV4_IFINDEXFRR_NEXTHOP_TYPE_IPV6FRR_NEXTHOP_TYPE_IPV6_IFINDEXFRR_NEXTHOP_TYPE_BLACKHOLENEXTHOP_TYPE_IPV6_IFINDEXNEXTHOP_TYPE_IPV6_IFNAMENEXTHOP_TYPE_BLACKHOLE"
var _NEXTHOP_TYPE_index = [...]uint8{0, 24, 45, 74, 95, 124, 150, 175, 199, 221}
func (i NEXTHOP_TYPE) String() string {
i -= 1
if i >= NEXTHOP_TYPE(len(_NEXTHOP_TYPE_index)-1) {
return "NEXTHOP_TYPE(" + strconv.FormatInt(int64(i+1), 10) + ")"
}
return _NEXTHOP_TYPE_name[_NEXTHOP_TYPE_index[i]:_NEXTHOP_TYPE_index[i+1]]
}
+55
View File
@@ -0,0 +1,55 @@
// Code generated by "stringer -type=nexthopFlag"; DO NOT EDIT.
package zebra
import "strconv"
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[nexthopFlagActive-1]
_ = x[nexthopFlagFIB-2]
_ = x[nexthopFlagRecursive-4]
_ = x[nexthopFlagOnlink-8]
_ = x[nexthopFlagMatched-16]
_ = x[nexthopFlagFiltered-32]
_ = x[nexthopFlagDuplicate-64]
_ = x[nexthopFlagEvpnRvtep-128]
}
const (
_nexthopFlag_name_0 = "nexthopFlagActivenexthopFlagFIB"
_nexthopFlag_name_1 = "nexthopFlagRecursive"
_nexthopFlag_name_2 = "nexthopFlagOnlink"
_nexthopFlag_name_3 = "nexthopFlagMatched"
_nexthopFlag_name_4 = "nexthopFlagFiltered"
_nexthopFlag_name_5 = "nexthopFlagDuplicate"
_nexthopFlag_name_6 = "nexthopFlagEvpnRvtep"
)
var (
_nexthopFlag_index_0 = [...]uint8{0, 17, 31}
)
func (i nexthopFlag) String() string {
switch {
case 1 <= i && i <= 2:
i -= 1
return _nexthopFlag_name_0[_nexthopFlag_index_0[i]:_nexthopFlag_index_0[i+1]]
case i == 4:
return _nexthopFlag_name_1
case i == 8:
return _nexthopFlag_name_2
case i == 16:
return _nexthopFlag_name_3
case i == 32:
return _nexthopFlag_name_4
case i == 64:
return _nexthopFlag_name_5
case i == 128:
return _nexthopFlag_name_6
default:
return "nexthopFlag(" + strconv.FormatInt(int64(i), 10) + ")"
}
}
+37
View File
@@ -0,0 +1,37 @@
// Code generated by "stringer -type=nexthopType"; DO NOT EDIT.
package zebra
import "strconv"
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[nexthopTypeIFIndex-1]
_ = x[nexthopTypeIPv4-2]
_ = x[nexthopTypeIPv4IFIndex-3]
_ = x[nexthopTypeIPv6-4]
_ = x[nexthopTypeIPv6IFIndex-5]
_ = x[nexthopTypeBlackhole-6]
_ = x[nexthopTypeIFName-2]
_ = x[backwardNexthopTypeIPv4-3]
_ = x[backwardNexthopTypeIPv4IFIndex-4]
_ = x[nexthopTypeIPv4IFName-5]
_ = x[backwardNexthopTypeIPv6-6]
_ = x[backwardNexthopTypeIPv6IFIndex-7]
_ = x[nexthopTypeIPv6IFName-8]
_ = x[backwardNexthopTypeBlackhole-9]
}
const _nexthopType_name = "nexthopTypeIFIndexnexthopTypeIPv4nexthopTypeIPv4IFIndexnexthopTypeIPv6nexthopTypeIPv6IFIndexnexthopTypeBlackholebackwardNexthopTypeIPv6IFIndexnexthopTypeIPv6IFNamebackwardNexthopTypeBlackhole"
var _nexthopType_index = [...]uint8{0, 18, 33, 55, 70, 92, 112, 142, 163, 191}
func (i nexthopType) String() string {
i -= 1
if i >= nexthopType(len(_nexthopType_index)-1) {
return "nexthopType(" + strconv.FormatInt(int64(i+1), 10) + ")"
}
return _nexthopType_name[_nexthopType_index[i]:_nexthopType_index[i+1]]
}
-16
View File
@@ -1,16 +0,0 @@
// Code generated by "stringer -type=PTM_ENABLE"; DO NOT EDIT.
package zebra
import "strconv"
const _PTM_ENABLE_name = "PTM_ENABLE_OFFPTM_ENABLE_ONPTM_ENABLE_UNSPEC"
var _PTM_ENABLE_index = [...]uint8{0, 14, 27, 44}
func (i PTM_ENABLE) String() string {
if i >= PTM_ENABLE(len(_PTM_ENABLE_index)-1) {
return "PTM_ENABLE(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _PTM_ENABLE_name[_PTM_ENABLE_index[i]:_PTM_ENABLE_index[i+1]]
}
-16
View File
@@ -1,16 +0,0 @@
// Code generated by "stringer -type=PTM_STATUS"; DO NOT EDIT.
package zebra
import "strconv"
const _PTM_STATUS_name = "PTM_STATUS_DOWNPTM_STATUS_UPPTM_STATUS_UNKNOWN"
var _PTM_STATUS_index = [...]uint8{0, 15, 28, 46}
func (i PTM_STATUS) String() string {
if i >= PTM_STATUS(len(_PTM_STATUS_index)-1) {
return "PTM_STATUS(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _PTM_STATUS_name[_PTM_STATUS_index[i]:_PTM_STATUS_index[i+1]]
}
+25
View File
@@ -0,0 +1,25 @@
// Code generated by "stringer -type=ptmEnable"; DO NOT EDIT.
package zebra
import "strconv"
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[ptmEnableOff-0]
_ = x[ptmEnableOn-1]
_ = x[ptmEnableUnspec-2]
}
const _ptmEnable_name = "ptmEnableOffptmEnableOnptmEnableUnspec"
var _ptmEnable_index = [...]uint8{0, 12, 23, 38}
func (i ptmEnable) String() string {
if i >= ptmEnable(len(_ptmEnable_index)-1) {
return "ptmEnable(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _ptmEnable_name[_ptmEnable_index[i]:_ptmEnable_index[i+1]]
}
+25
View File
@@ -0,0 +1,25 @@
// Code generated by "stringer -type=ptmStatus"; DO NOT EDIT.
package zebra
import "strconv"
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[ptmStatusDown-0]
_ = x[ptmStatusUp-1]
_ = x[ptmStatusUnknown-2]
}
const _ptmStatus_name = "ptmStatusDownptmStatusUpptmStatusUnknown"
var _ptmStatus_index = [...]uint8{0, 13, 24, 40}
func (i ptmStatus) String() string {
if i >= ptmStatus(len(_ptmStatus_index)-1) {
return "ptmStatus(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _ptmStatus_name[_ptmStatus_index[i]:_ptmStatus_index[i+1]]
}
-16
View File
@@ -1,16 +0,0 @@
// Code generated by "stringer -type=ROUTE_TYPE"; DO NOT EDIT.
package zebra
import "strconv"
const _ROUTE_TYPE_name = "FRR_ZAPI6_ROUTE_SYSTEMFRR_ZAPI6_ROUTE_KERNELFRR_ZAPI6_ROUTE_CONNECTFRR_ZAPI6_ROUTE_STATICFRR_ZAPI6_ROUTE_RIPFRR_ZAPI6_ROUTE_RIPNGFRR_ZAPI6_ROUTE_OSPFFRR_ZAPI6_ROUTE_OSPF6FRR_ZAPI6_ROUTE_ISISFRR_ZAPI6_ROUTE_BGPFRR_ZAPI6_ROUTE_PIMFRR_ZAPI6_ROUTE_EIGRPFRR_ZAPI6_ROUTE_NHRPFRR_ZAPI6_ROUTE_HSLSFRR_ZAPI6_ROUTE_OLSRFRR_ZAPI6_ROUTE_TABLEFRR_ZAPI6_ROUTE_LDPFRR_ZAPI6_ROUTE_VNCFRR_ZAPI6_ROUTE_VNC_DIRECTFRR_ZAPI6_ROUTE_VNC_DIRECT_RHFRR_ZAPI6_ROUTE_BGP_DIRECTFRR_ZAPI6_ROUTE_BGP_DIRECT_EXTFRR_ZAPI6_ROUTE_BABELFRR_ZAPI6_ROUTE_SHARPFRR_ZAPI6_ROUTE_PBRFRR_ZAPI6_ROUTE_BFDFRR_ZAPI6_ROUTE_ALLFRR_ZAPI6_ROUTE_MAX"
var _ROUTE_TYPE_index = [...]uint16{0, 22, 44, 67, 89, 108, 129, 149, 170, 190, 209, 228, 249, 269, 289, 309, 330, 349, 368, 394, 423, 449, 479, 500, 521, 540, 559, 578, 597}
func (i ROUTE_TYPE) String() string {
if i >= ROUTE_TYPE(len(_ROUTE_TYPE_index)-1) {
return "ROUTE_TYPE(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _ROUTE_TYPE_name[_ROUTE_TYPE_index[i]:_ROUTE_TYPE_index[i+1]]
}
+73
View File
@@ -0,0 +1,73 @@
// Code generated by "stringer -type=RouteType"; DO NOT EDIT.
package zebra
import "strconv"
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[routeSystem-0]
_ = x[routeKernel-1]
_ = x[routeConnect-2]
_ = x[RouteStatic-3]
_ = x[routeRIP-4]
_ = x[routeRIPNG-5]
_ = x[routeOSPF-6]
_ = x[routeOSPF6-7]
_ = x[routeISIS-8]
_ = x[RouteBGP-9]
_ = x[routePIM-10]
_ = x[routeEIGRP-11]
_ = x[routeNHRP-12]
_ = x[routeHSLS-13]
_ = x[routeOLSR-14]
_ = x[routeTABLE-15]
_ = x[routeLDP-16]
_ = x[routeVNC-17]
_ = x[routeVNCDirect-18]
_ = x[routeVNCDirectRH-19]
_ = x[routeBGPDirect-20]
_ = x[routeBGPDirectEXT-21]
_ = x[routeBABEL-22]
_ = x[routeSHARP-23]
_ = x[routePBR-24]
_ = x[routeBFD-25]
_ = x[routeOpenfabric-26]
_ = x[routeVRRP-27]
_ = x[routeNHG-28]
_ = x[routeAll-29]
_ = x[routeMax-30]
_ = x[zapi5Frr4RouteAll-24]
_ = x[zapi5Frr5RouteAll-25]
_ = x[zapi6Frr6RouteAll-26]
_ = x[zapi6Frr7RouteAll-27]
_ = x[zapi6Frr7dot2RouteAll-28]
_ = x[zapi4RouteNHRP-11]
_ = x[zapi4RouteHSLS-12]
_ = x[zapi4RouteOLSR-13]
_ = x[zapi4RouteTABLE-14]
_ = x[zapi4RouteLDP-15]
_ = x[zapi4RouteVNC-16]
_ = x[zapi4RouteVNCDirect-17]
_ = x[zapi4RouteVNCDirectRH-18]
_ = x[zapi4RouteBGPDixrect-19]
_ = x[zapi4RouteBGPDirectEXT-20]
_ = x[zapi4RouteAll-21]
_ = x[zapi3RouteHSLS-11]
_ = x[zapi3RouteOLSR-12]
_ = x[zapi3RouteBABEL-13]
_ = x[zapi3RouteNHRP-14]
}
const _RouteType_name = "routeSystemrouteKernelrouteConnectRouteStaticrouteRIProuteRIPNGrouteOSPFrouteOSPF6routeISISRouteBGProutePIMrouteEIGRProuteNHRProuteHSLSrouteOLSRrouteTABLErouteLDProuteVNCrouteVNCDirectrouteVNCDirectRHrouteBGPDirectrouteBGPDirectEXTrouteBABELrouteSHARProutePBRrouteBFDrouteOpenfabricrouteVRRProuteNHGrouteAllrouteMax"
var _RouteType_index = [...]uint16{0, 11, 22, 34, 45, 53, 63, 72, 82, 91, 99, 107, 117, 126, 135, 144, 154, 162, 170, 184, 200, 214, 231, 241, 251, 259, 267, 282, 291, 299, 307, 315}
func (i RouteType) String() string {
if i >= RouteType(len(_RouteType_index)-1) {
return "RouteType(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _RouteType_name[_RouteType_index[i]:_RouteType_index[i+1]]
}
+30 -11
View File
@@ -1,17 +1,36 @@
// Code generated by "stringer -type=SAFI"; DO NOT EDIT.
// Code generated by "stringer -type=Safi"; DO NOT EDIT.
package zebra
import "strconv"
const _SAFI_name = "FRR_ZAPI5_SAFI_UNICASTFRR_ZAPI5_SAFI_MULTICASTFRR_ZAPI5_SAFI_MPLS_VPNFRR_ZAPI5_SAFI_ENCAPFRR_ZAPI5_SAFI_EVPNFRR_ZAPI5_SAFI_LABELED_UNICASTFRR_ZAPI5_SAFI_FLOWSPECFRR_ZAPI5_SAFI_MAX"
var _SAFI_index = [...]uint8{0, 22, 46, 69, 89, 108, 138, 161, 179}
func (i SAFI) String() string {
i -= 1
if i >= SAFI(len(_SAFI_index)-1) {
return "SAFI(" + strconv.FormatInt(int64(i+1), 10) + ")"
}
return _SAFI_name[_SAFI_index[i]:_SAFI_index[i+1]]
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[safiUnspec-0]
_ = x[SafiUnicast-1]
_ = x[safiMulticast-2]
_ = x[safiMplsVpn-3]
_ = x[safiEncap-4]
_ = x[safiEvpn-5]
_ = x[safiLabeledUnicast-6]
_ = x[safiFlowspec-7]
_ = x[safiMax-8]
_ = x[zapi4SafiMplsVpn-3]
_ = x[zapi3SafiMplsVpn-4]
_ = x[zapi4SafiEncap-5]
_ = x[zapi4SafiEvpn-6]
_ = x[zapi3SafiEncap-7]
}
const _Safi_name = "safiUnspecSafiUnicastsafiMulticastsafiMplsVpnsafiEncapsafiEvpnsafiLabeledUnicastsafiFlowspecsafiMax"
var _Safi_index = [...]uint8{0, 10, 21, 34, 45, 54, 62, 80, 92, 99}
func (i Safi) String() string {
if i >= Safi(len(_Safi_index)-1) {
return "Safi(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _Safi_name[_Safi_index[i]:_Safi_index[i+1]]
}
+1943 -2288
View File
File diff suppressed because it is too large Load Diff
-200
View File
@@ -1,200 +0,0 @@
// Copyright (C) 2014, 2015 Nippon Telegraph and Telephone Corporation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
// implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package zebra
import (
"fmt"
)
// For Cumulus Linux 3.7.7, zebra 4.0+cl3u13 (ZAPI version 5)
const (
FRR_ZAPI5_CL_INTERFACE_ADD API_TYPE = iota
FRR_ZAPI5_CL_INTERFACE_DELETE
FRR_ZAPI5_CL_INTERFACE_ADDRESS_ADD
FRR_ZAPI5_CL_INTERFACE_ADDRESS_DELETE
FRR_ZAPI5_CL_INTERFACE_UP
FRR_ZAPI5_CL_INTERFACE_DOWN
FRR_ZAPI5_CL_INTERFACE_SET_MASTER
FRR_ZAPI5_CL_INTERFACE_SET_PROTODOWN
FRR_ZAPI5_CL_ROUTE_ADD
FRR_ZAPI5_CL_ROUTE_DELETE
FRR_ZAPI5_CL_ROUTE_NOTIFY_OWNER
FRR_ZAPI5_CL_REDISTRIBUTE_ADD
FRR_ZAPI5_CL_REDISTRIBUTE_DELETE
FRR_ZAPI5_CL_REDISTRIBUTE_DEFAULT_ADD
FRR_ZAPI5_CL_REDISTRIBUTE_DEFAULT_DELETE
FRR_ZAPI5_CL_ROUTER_ID_ADD
FRR_ZAPI5_CL_ROUTER_ID_DELETE
FRR_ZAPI5_CL_ROUTER_ID_UPDATE
FRR_ZAPI5_CL_HELLO
FRR_ZAPI5_CL_NEXTHOP_REGISTER
FRR_ZAPI5_CL_NEXTHOP_UNREGISTER
FRR_ZAPI5_CL_NEXTHOP_UPDATE
FRR_ZAPI5_CL_INTERFACE_NBR_ADDRESS_ADD
FRR_ZAPI5_CL_INTERFACE_NBR_ADDRESS_DELETE
FRR_ZAPI5_CL_INTERFACE_BFD_DEST_UPDATE
FRR_ZAPI5_CL_IMPORT_ROUTE_REGISTER
FRR_ZAPI5_CL_IMPORT_ROUTE_UNREGISTER
FRR_ZAPI5_CL_IMPORT_CHECK_UPDATE
FRR_ZAPI5_CL_BFD_DEST_REGISTER
FRR_ZAPI5_CL_BFD_DEST_DEREGISTER
FRR_ZAPI5_CL_BFD_DEST_UPDATE
FRR_ZAPI5_CL_BFD_DEST_REPLAY
FRR_ZAPI5_CL_REDISTRIBUTE_ROUTE_ADD
FRR_ZAPI5_CL_REDISTRIBUTE_ROUTE_DEL
FRR_ZAPI5_CL_VRF_UNREGISTER
FRR_ZAPI5_CL_VRF_ADD
FRR_ZAPI5_CL_VRF_DELETE
FRR_ZAPI5_CL_VRF_LABEL
FRR_ZAPI5_CL_INTERFACE_VRF_UPDATE
FRR_ZAPI5_CL_BFD_CLIENT_REGISTER
FRR_ZAPI5_CL_INTERFACE_ENABLE_RADV
FRR_ZAPI5_CL_INTERFACE_DISABLE_RADV
FRR_ZAPI5_CL_IPV4_NEXTHOP_LOOKUP_MRIB
FRR_ZAPI5_CL_INTERFACE_LINK_PARAMS
FRR_ZAPI5_CL_MPLS_LABELS_ADD
FRR_ZAPI5_CL_MPLS_LABELS_DELETE
FRR_ZAPI5_CL_IPMR_ROUTE_STATS
FRR_ZAPI5_CL_LABEL_MANAGER_CONNECT
FRR_ZAPI5_CL_GET_LABEL_CHUNK
FRR_ZAPI5_CL_RELEASE_LABEL_CHUNK
FRR_ZAPI5_CL_FEC_REGISTER
FRR_ZAPI5_CL_FEC_UNREGISTER
FRR_ZAPI5_CL_FEC_UPDATE
FRR_ZAPI5_CL_ADVERTISE_SVI_MACSTUFF
FRR_ZAPI5_CL_ADVERTISE_DEFAULT_GW
FRR_ZAPI5_CL_ADVERTISE_SUBNET
FRR_ZAPI5_CL_ADVERTISE_ALL_VNI
FRR_ZAPI5_CL_VNI_ADD
FRR_ZAPI5_CL_VNI_DEL
FRR_ZAPI5_CL_L3VNI_ADD
FRR_ZAPI5_CL_L3VNI_DEL
FRR_ZAPI5_CL_REMOTE_VTEP_ADD
FRR_ZAPI5_CL_REMOTE_VTEP_DEL
FRR_ZAPI5_CL_MACIP_ADD
FRR_ZAPI5_CL_MACIP_DEL
FRR_ZAPI5_CL_DAD_STUFF
FRR_ZAPI5_CL_IP_PREFIX_ROUTE_ADD
FRR_ZAPI5_CL_IP_PREFIX_ROUTE_DEL
FRR_ZAPI5_CL_REMOTE_MACIP_ADD
FRR_ZAPI5_CL_REMOTE_MACIP_DEL
FRR_ZAPI5_CL_PW_ADD
FRR_ZAPI5_CL_PW_DELETE
FRR_ZAPI5_CL_PW_SET
FRR_ZAPI5_CL_PW_UNSET
FRR_ZAPI5_CL_PW_STATUS_UPDATE
FRR_ZAPI5_CL_RULE_ADD
FRR_ZAPI5_CL_RULE_DELETE
FRR_ZAPI5_CL_RULE_NOTIFY_OWNER
FRR_ZAPI5_CL_VXLAN_FLOODINATOR
)
var cumulusZapi5CommandMap = map[API_TYPE]API_TYPE{
FRR_ZAPI5_CL_INTERFACE_ADD: FRR_ZAPI5_INTERFACE_ADD,
FRR_ZAPI5_CL_INTERFACE_DELETE: FRR_ZAPI5_INTERFACE_DELETE,
FRR_ZAPI5_CL_INTERFACE_ADDRESS_ADD: FRR_ZAPI5_INTERFACE_ADDRESS_ADD,
FRR_ZAPI5_CL_INTERFACE_ADDRESS_DELETE: FRR_ZAPI5_INTERFACE_ADDRESS_DELETE,
FRR_ZAPI5_CL_INTERFACE_UP: FRR_ZAPI5_INTERFACE_UP,
FRR_ZAPI5_CL_INTERFACE_DOWN: FRR_ZAPI5_INTERFACE_DOWN,
FRR_ZAPI5_CL_INTERFACE_SET_MASTER: FRR_ZAPI5_INTERFACE_SET_MASTER,
FRR_ZAPI5_CL_ROUTE_ADD: FRR_ZAPI5_ROUTE_ADD,
FRR_ZAPI5_CL_ROUTE_DELETE: FRR_ZAPI5_ROUTE_DELETE,
FRR_ZAPI5_CL_ROUTE_NOTIFY_OWNER: FRR_ZAPI5_ROUTE_NOTIFY_OWNER,
FRR_ZAPI5_CL_REDISTRIBUTE_ADD: FRR_ZAPI5_REDISTRIBUTE_ADD,
FRR_ZAPI5_CL_REDISTRIBUTE_DELETE: FRR_ZAPI5_REDISTRIBUTE_DELETE,
FRR_ZAPI5_CL_REDISTRIBUTE_DEFAULT_ADD: FRR_ZAPI5_REDISTRIBUTE_DEFAULT_ADD,
FRR_ZAPI5_CL_REDISTRIBUTE_DEFAULT_DELETE: FRR_ZAPI5_REDISTRIBUTE_DEFAULT_DELETE,
FRR_ZAPI5_CL_ROUTER_ID_ADD: FRR_ZAPI5_ROUTER_ID_ADD,
FRR_ZAPI5_CL_ROUTER_ID_DELETE: FRR_ZAPI5_ROUTER_ID_DELETE,
FRR_ZAPI5_CL_ROUTER_ID_UPDATE: FRR_ZAPI5_ROUTER_ID_UPDATE,
FRR_ZAPI5_CL_HELLO: FRR_ZAPI5_HELLO,
FRR_ZAPI5_CL_NEXTHOP_REGISTER: FRR_ZAPI5_NEXTHOP_REGISTER,
FRR_ZAPI5_CL_NEXTHOP_UNREGISTER: FRR_ZAPI5_NEXTHOP_UNREGISTER,
FRR_ZAPI5_CL_NEXTHOP_UPDATE: FRR_ZAPI5_NEXTHOP_UPDATE,
FRR_ZAPI5_CL_INTERFACE_NBR_ADDRESS_ADD: FRR_ZAPI5_INTERFACE_NBR_ADDRESS_ADD,
FRR_ZAPI5_CL_INTERFACE_NBR_ADDRESS_DELETE: FRR_ZAPI5_INTERFACE_NBR_ADDRESS_DELETE,
FRR_ZAPI5_CL_INTERFACE_BFD_DEST_UPDATE: FRR_ZAPI5_INTERFACE_BFD_DEST_UPDATE,
FRR_ZAPI5_CL_IMPORT_ROUTE_REGISTER: FRR_ZAPI5_IMPORT_ROUTE_REGISTER,
FRR_ZAPI5_CL_IMPORT_ROUTE_UNREGISTER: FRR_ZAPI5_IMPORT_ROUTE_REGISTER,
FRR_ZAPI5_CL_IMPORT_CHECK_UPDATE: FRR_ZAPI5_IMPORT_CHECK_UPDATE,
FRR_ZAPI5_CL_BFD_DEST_REGISTER: FRR_ZAPI5_BFD_DEST_REGISTER,
FRR_ZAPI5_CL_BFD_DEST_DEREGISTER: FRR_ZAPI5_BFD_DEST_DEREGISTER,
FRR_ZAPI5_CL_BFD_DEST_UPDATE: FRR_ZAPI5_BFD_DEST_UPDATE,
FRR_ZAPI5_CL_BFD_DEST_REPLAY: FRR_ZAPI5_BFD_DEST_REPLAY,
FRR_ZAPI5_CL_REDISTRIBUTE_ROUTE_ADD: FRR_ZAPI5_REDISTRIBUTE_ROUTE_ADD,
FRR_ZAPI5_CL_REDISTRIBUTE_ROUTE_DEL: FRR_ZAPI5_REDISTRIBUTE_ROUTE_DEL,
FRR_ZAPI5_CL_VRF_UNREGISTER: FRR_ZAPI5_VRF_UNREGISTER,
FRR_ZAPI5_CL_VRF_ADD: FRR_ZAPI5_VRF_ADD,
FRR_ZAPI5_CL_VRF_DELETE: FRR_ZAPI5_VRF_DELETE,
FRR_ZAPI5_CL_VRF_LABEL: FRR_ZAPI5_VRF_LABEL,
FRR_ZAPI5_CL_INTERFACE_VRF_UPDATE: FRR_ZAPI5_INTERFACE_VRF_UPDATE,
FRR_ZAPI5_CL_BFD_CLIENT_REGISTER: FRR_ZAPI5_BFD_CLIENT_REGISTER,
FRR_ZAPI5_CL_INTERFACE_ENABLE_RADV: FRR_ZAPI5_INTERFACE_ENABLE_RADV,
FRR_ZAPI5_CL_INTERFACE_DISABLE_RADV: FRR_ZAPI5_INTERFACE_DISABLE_RADV,
FRR_ZAPI5_CL_IPV4_NEXTHOP_LOOKUP_MRIB: FRR_ZAPI5_IPV4_NEXTHOP_LOOKUP_MRIB,
FRR_ZAPI5_CL_INTERFACE_LINK_PARAMS: FRR_ZAPI5_INTERFACE_LINK_PARAMS,
FRR_ZAPI5_CL_MPLS_LABELS_ADD: FRR_ZAPI5_MPLS_LABELS_ADD,
FRR_ZAPI5_CL_MPLS_LABELS_DELETE: FRR_ZAPI5_MPLS_LABELS_DELETE,
FRR_ZAPI5_CL_IPMR_ROUTE_STATS: FRR_ZAPI5_IPMR_ROUTE_STATS,
FRR_ZAPI5_CL_LABEL_MANAGER_CONNECT: FRR_ZAPI5_LABEL_MANAGER_CONNECT,
FRR_ZAPI5_CL_GET_LABEL_CHUNK: FRR_ZAPI5_GET_LABEL_CHUNK,
FRR_ZAPI5_CL_RELEASE_LABEL_CHUNK: FRR_ZAPI5_RELEASE_LABEL_CHUNK,
FRR_ZAPI5_CL_FEC_REGISTER: FRR_ZAPI5_FEC_REGISTER,
FRR_ZAPI5_CL_FEC_UNREGISTER: FRR_ZAPI5_FEC_UNREGISTER,
FRR_ZAPI5_CL_FEC_UPDATE: FRR_ZAPI5_FEC_UPDATE,
FRR_ZAPI5_CL_ADVERTISE_DEFAULT_GW: FRR_ZAPI5_ADVERTISE_DEFAULT_GW,
FRR_ZAPI5_CL_ADVERTISE_SUBNET: FRR_ZAPI5_ADVERTISE_SUBNET,
FRR_ZAPI5_CL_ADVERTISE_ALL_VNI: FRR_ZAPI5_ADVERTISE_ALL_VNI,
FRR_ZAPI5_CL_VNI_ADD: FRR_ZAPI5_VNI_ADD,
FRR_ZAPI5_CL_VNI_DEL: FRR_ZAPI5_VNI_DEL,
FRR_ZAPI5_CL_L3VNI_ADD: FRR_ZAPI5_L3VNI_ADD,
FRR_ZAPI5_CL_L3VNI_DEL: FRR_ZAPI5_L3VNI_DEL,
FRR_ZAPI5_CL_REMOTE_VTEP_ADD: FRR_ZAPI5_REMOTE_VTEP_ADD,
FRR_ZAPI5_CL_REMOTE_VTEP_DEL: FRR_ZAPI5_REMOTE_VTEP_DEL,
FRR_ZAPI5_CL_MACIP_ADD: FRR_ZAPI5_MACIP_ADD,
FRR_ZAPI5_CL_MACIP_DEL: FRR_ZAPI5_MACIP_DEL,
FRR_ZAPI5_CL_IP_PREFIX_ROUTE_ADD: FRR_ZAPI5_IP_PREFIX_ROUTE_ADD,
FRR_ZAPI5_CL_IP_PREFIX_ROUTE_DEL: FRR_ZAPI5_IP_PREFIX_ROUTE_DEL,
FRR_ZAPI5_CL_REMOTE_MACIP_ADD: FRR_ZAPI5_REMOTE_MACIP_ADD,
FRR_ZAPI5_CL_REMOTE_MACIP_DEL: FRR_ZAPI5_REMOTE_MACIP_DEL,
FRR_ZAPI5_CL_PW_ADD: FRR_ZAPI5_PW_ADD,
FRR_ZAPI5_CL_PW_DELETE: FRR_ZAPI5_PW_DELETE,
FRR_ZAPI5_CL_PW_SET: FRR_ZAPI5_PW_SET,
FRR_ZAPI5_CL_PW_UNSET: FRR_ZAPI5_PW_UNSET,
FRR_ZAPI5_CL_PW_STATUS_UPDATE: FRR_ZAPI5_PW_STATUS_UPDATE,
FRR_ZAPI5_CL_RULE_ADD: FRR_ZAPI5_RULE_ADD,
FRR_ZAPI5_CL_RULE_DELETE: FRR_ZAPI5_RULE_DELETE,
FRR_ZAPI5_CL_RULE_NOTIFY_OWNER: FRR_ZAPI5_RULE_NOTIFY_OWNER,
}
// cumulusZapi5Command adjust command (API_TYPE) between cumulus Zebra and latest Zapi5
func cumulusZapi5Command(command API_TYPE, softwareName string, from bool) (API_TYPE, error) {
if softwareName != "cumulus" {
return command, fmt.Errorf("softwareName %s is not supported", softwareName)
}
// if from is true, command will be converted from cumulus Zebra to latest Zapi5 (for parsing)
// if from is false, command will be converted from latest Zapi5 to cumulus Zebra (for send)
if from {
return cumulusZapi5CommandMap[command], nil
} else {
for k, v := range cumulusZapi5CommandMap {
if v == command {
return k, nil
}
}
}
return command, fmt.Errorf("unsupported command")
}
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -710,7 +710,7 @@ func (s *BgpServer) setPathVrfIdMap(paths []*table.Path, m map[uint32]bool) {
}
}
default:
m[zebra.VRF_DEFAULT] = true
m[zebra.DefaultVrf] = true
}
}
}
+40 -38
View File
@@ -116,11 +116,10 @@ func filterOutExternalPath(paths []*table.Path) []*table.Path {
return filteredPaths
}
func addMessageLabelToIPRouteBody(path *table.Path, vrfId uint32, z *zebraClient, msgFlags *zebra.MESSAGE_FLAG, nexthop *zebra.Nexthop) {
v := z.client.Version
func addLabelToNexthop(path *table.Path, z *zebraClient, msgFlags *zebra.MessageFlag, nexthop *zebra.Nexthop) {
rf := path.GetRouteFamily()
if v > 4 && (rf == bgp.RF_IPv4_VPN || rf == bgp.RF_IPv6_VPN) {
*msgFlags |= zebra.FRR_ZAPI5_MESSAGE_LABEL
if rf == bgp.RF_IPv4_VPN || rf == bgp.RF_IPv6_VPN {
z.client.SetLabelFlag(msgFlags, nexthop)
switch rf {
case bgp.RF_IPv4_VPN:
for _, label := range path.GetNlri().(*bgp.LabeledVPNIPAddrPrefix).Labels.Labels {
@@ -136,7 +135,7 @@ func addMessageLabelToIPRouteBody(path *table.Path, vrfId uint32, z *zebraClient
}
}
func newIPRouteBody(dst []*table.Path, vrfId uint32, z *zebraClient) (body *zebra.IPRouteBody, isWithdraw bool) {
func newIPRouteBody(dst []*table.Path, vrfID uint32, z *zebraClient) (body *zebra.IPRouteBody, isWithdraw bool) {
version := z.client.Version
paths := filterOutExternalPath(dst)
if len(paths) == 0 {
@@ -148,7 +147,7 @@ func newIPRouteBody(dst []*table.Path, vrfId uint32, z *zebraClient) (body *zebr
var prefix net.IP
var nexthop zebra.Nexthop
nexthops := make([]zebra.Nexthop, 0, len(paths))
msgFlags := zebra.MESSAGE_NEXTHOP
msgFlags := zebra.MessageNexthop
switch path.GetRouteFamily() {
case bgp.RF_IPv4_UC:
prefix = path.GetNlri().(*bgp.IPAddrPrefix).IPAddrPrefixDefault.Prefix.To4()
@@ -161,10 +160,10 @@ func newIPRouteBody(dst []*table.Path, vrfId uint32, z *zebraClient) (body *zebr
default:
return nil, false
}
nhVrfId := uint32(zebra.VRF_DEFAULT)
for vrfPath, pathVrfId := range z.pathVrfMap {
nhVrfID := uint32(zebra.DefaultVrf)
for vrfPath, pathVrfID := range z.pathVrfMap {
if path.Equal(vrfPath) {
nhVrfId = pathVrfId
nhVrfID = pathVrfID
break
} else {
continue
@@ -172,34 +171,27 @@ func newIPRouteBody(dst []*table.Path, vrfId uint32, z *zebraClient) (body *zebr
}
for _, p := range paths {
nexthop.Gate = p.GetNexthop()
nexthop.VrfId = nhVrfId
if nhVrfId != vrfId {
addMessageLabelToIPRouteBody(path, vrfId, z, &msgFlags, &nexthop)
nexthop.VrfID = nhVrfID
if nhVrfID != vrfID {
addLabelToNexthop(path, z, &msgFlags, &nexthop)
}
nexthops = append(nexthops, nexthop)
}
plen, _ := strconv.ParseUint(l[1], 10, 8)
med, err := path.GetMed()
if err == nil {
if version < 5 {
msgFlags |= zebra.MESSAGE_METRIC
} else {
msgFlags |= zebra.FRR_ZAPI5_MESSAGE_METRIC
}
msgFlags |= zebra.MessageMetric.ToEach(version)
}
var flags zebra.FLAG
var flags zebra.Flag
if path.IsIBGP() {
flags = zebra.FLAG_IBGP | zebra.FLAG_ALLOW_RECURSION // 0x08|0x01
if z.client.Version == 6 && z.client.SoftwareName != "frr6" {
flags = zebra.FRR_ZAPI6_FLAG_IBGP | zebra.FRR_ZAPI6_FLAG_ALLOW_RECURSION //0x04|0x01
}
flags = zebra.FlagIBGP.ToEach(z.client.Version, z.client.SoftwareName) | zebra.FlagAllowRecursion
} else if path.GetSource().MultihopTtl > 0 {
flags = zebra.FLAG_ALLOW_RECURSION // 0x01, FRR_ZAPI6_FLAG_ALLOW_RECURSION is same.
flags = zebra.FlagAllowRecursion // 0x01
}
return &zebra.IPRouteBody{
Type: zebra.ROUTE_BGP,
Type: zebra.RouteBGP,
Flags: flags,
SAFI: zebra.SAFI_UNICAST,
Safi: zebra.SafiUnicast,
Message: msgFlags,
Prefix: zebra.Prefix{
Prefix: prefix,
@@ -262,8 +254,8 @@ func newNexthopUnregisterBody(family uint16, prefix net.IP) *zebra.NexthopRegist
func newPathFromIPRouteMessage(m *zebra.Message, version uint8, software string) *table.Path {
header := m.Header
body := m.Body.(*zebra.IPRouteBody)
family := body.RouteFamily(version)
isWithdraw := body.IsWithdraw(version)
family := body.RouteFamily(version, software)
isWithdraw := body.IsWithdraw(version, software)
var nlri bgp.AddrPrefixInterface
pattr := make([]bgp.PathAttributeInterface, 0)
@@ -314,9 +306,9 @@ func newPathFromIPRouteMessage(m *zebra.Message, version uint8, software string)
}
type mplsLabelParameter struct {
rangeSize uint32
maps map[uint64]*table.Bitmap
unassinedVrf []*table.Vrf //Vrfs which are not assigned MPLS label
rangeSize uint32
maps map[uint64]*table.Bitmap
unassignedVrf []*table.Vrf //Vrfs which are not assigned MPLS label
}
type zebraClient struct {
@@ -403,17 +395,27 @@ func (z *zebraClient) loop() {
if len(paths) == 0 {
// If there is no path bound for the given nexthop, send
// NEXTHOP_UNREGISTER message.
z.client.SendNexthopRegister(msg.Header.VrfId, newNexthopUnregisterBody(uint16(body.Prefix.Family), body.Prefix.Prefix), true)
z.client.SendNexthopRegister(msg.Header.VrfID, newNexthopUnregisterBody(uint16(body.Prefix.Family), body.Prefix.Prefix), true)
delete(z.nexthopCache, body.Prefix.Prefix.String())
}
z.updatePathByNexthopCache(paths)
case *zebra.GetLabelChunkBody:
log.WithFields(log.Fields{
"Topic": "Zebra",
"Start": body.Start,
"End": body.End,
}).Debugf("zebra GetLabelChunkBody is received")
startEnd := uint64(body.Start)<<32 | uint64(body.End)
z.mplsLabel.maps[startEnd] = table.NewBitmap(int(body.End - body.Start + 1))
for _, vrf := range z.mplsLabel.unassinedVrf {
z.assignAndSendVrfMplsLabel(vrf)
for _, vrf := range z.mplsLabel.unassignedVrf {
if err := z.assignAndSendVrfMplsLabel(vrf); err != nil {
log.WithFields(log.Fields{
"Topic": "Zebra",
"Error": err,
}).Error("zebra failed to assign and send vrf mpls label")
}
}
z.mplsLabel.unassinedVrf = nil
z.mplsLabel.unassignedVrf = nil
}
case ev := <-w.Event():
switch msg := ev.(type) {
@@ -479,7 +481,7 @@ func newZebraClient(s *BgpServer, url string, protos []string, version uint8, nh
ver++
}
for elem, ver := range zapivers {
cli, err = zebra.NewClient(l[0], l[1], zebra.ROUTE_BGP, ver, softwareName)
cli, err = zebra.NewClient(l[0], l[1], zebra.RouteBGP, ver, softwareName, mplsLabelRangeSize)
if cli != nil && err == nil {
usingVersion = ver
break
@@ -511,7 +513,7 @@ func newZebraClient(s *BgpServer, url string, protos []string, version uint8, nh
if err != nil {
return nil, err
}
cli.SendRedistribute(t, zebra.VRF_DEFAULT)
cli.SendRedistribute(t, zebra.DefaultVrf)
}
w := &zebraClient{
client: cli,
@@ -525,7 +527,7 @@ func newZebraClient(s *BgpServer, url string, protos []string, version uint8, nh
dead: make(chan struct{}),
}
go w.loop()
if mplsLabelRangeSize > 0 {
if mplsLabelRangeSize > 0 && cli.SupportMpls() {
if err = cli.SendGetLabelChunk(&zebra.GetLabelChunkBody{ChunkSize: mplsLabelRangeSize}); err != nil {
return nil, err
}
@@ -560,7 +562,7 @@ func (z *zebraClient) assignAndSendVrfMplsLabel(vrf *table.Vrf) error {
return err
}
} else if vrf.MplsLabel == 0 { // GetLabelChunk is not performed
z.mplsLabel.unassinedVrf = append(z.mplsLabel.unassinedVrf, vrf)
z.mplsLabel.unassignedVrf = append(z.mplsLabel.unassignedVrf, vrf)
}
return err
}
+27 -58
View File
@@ -28,65 +28,22 @@ import (
func Test_newPathFromIPRouteMessage(t *testing.T) {
assert := assert.New(t)
ipv4RouteAddCommand := map[uint8]zebra.API_TYPE{
2: zebra.IPV4_ROUTE_ADD,
3: zebra.IPV4_ROUTE_ADD,
4: zebra.FRR_IPV4_ROUTE_ADD,
5: zebra.FRR_ZAPI5_IPV4_ROUTE_ADD,
6: zebra.FRR_ZAPI6_ROUTE_ADD,
}
ipv4RouteDeleteCommand := map[uint8]zebra.API_TYPE{
2: zebra.IPV4_ROUTE_DELETE,
3: zebra.IPV4_ROUTE_DELETE,
4: zebra.FRR_IPV4_ROUTE_DELETE,
5: zebra.FRR_ZAPI5_IPV4_ROUTE_DELETE,
6: zebra.FRR_ZAPI6_ROUTE_DELETE,
}
ipv6RouteAddCommand := map[uint8]zebra.API_TYPE{
2: zebra.IPV6_ROUTE_ADD,
3: zebra.IPV6_ROUTE_ADD,
4: zebra.FRR_IPV6_ROUTE_ADD,
5: zebra.FRR_ZAPI5_IPV6_ROUTE_ADD,
6: zebra.FRR_ZAPI6_ROUTE_ADD,
}
ipv6RouteDeleteCommand := map[uint8]zebra.API_TYPE{
2: zebra.IPV6_ROUTE_DELETE,
3: zebra.IPV6_ROUTE_DELETE,
4: zebra.FRR_IPV6_ROUTE_DELETE,
5: zebra.FRR_ZAPI5_IPV6_ROUTE_DELETE,
6: zebra.FRR_ZAPI6_ROUTE_DELETE,
}
message := map[uint8]zebra.MESSAGE_FLAG{
2: zebra.MESSAGE_NEXTHOP | zebra.MESSAGE_DISTANCE | zebra.MESSAGE_METRIC | zebra.MESSAGE_MTU,
3: zebra.MESSAGE_NEXTHOP | zebra.MESSAGE_DISTANCE | zebra.MESSAGE_METRIC | zebra.MESSAGE_MTU,
4: zebra.FRR_MESSAGE_NEXTHOP | zebra.FRR_MESSAGE_DISTANCE | zebra.FRR_MESSAGE_METRIC | zebra.FRR_MESSAGE_MTU,
5: zebra.FRR_ZAPI5_MESSAGE_NEXTHOP | zebra.FRR_ZAPI5_MESSAGE_DISTANCE | zebra.FRR_ZAPI5_MESSAGE_METRIC | zebra.FRR_ZAPI5_MESSAGE_MTU,
6: zebra.FRR_ZAPI5_MESSAGE_NEXTHOP | zebra.FRR_ZAPI5_MESSAGE_DISTANCE | zebra.FRR_ZAPI5_MESSAGE_METRIC | zebra.FRR_ZAPI5_MESSAGE_MTU,
}
for v := zebra.MinZapiVer; v <= zebra.MaxZapiVer; v++ {
// IPv4 Route Add
m := &zebra.Message{}
marker := zebra.HEADER_MARKER
if v > 3 {
marker = zebra.FRR_HEADER_MARKER
}
flag := zebra.FLAG_SELECTED
if v > 5 {
flag = zebra.FRR_ZAPI6_FLAG_SELECTED
}
flag := zebra.FlagSelected.ToEach(v, "")
message := zebra.MessageNexthop | zebra.MessageDistance.ToEach(v) | zebra.MessageMetric.ToEach(v) | zebra.MessageMTU.ToEach(v)
h := &zebra.Header{
Len: zebra.HeaderSize(v),
Marker: marker,
Marker: zebra.HeaderMarker(v),
Version: v,
Command: ipv4RouteAddCommand[v],
Command: zebra.RouteAdd.ToEach(v, ""),
}
b := &zebra.IPRouteBody{
Type: zebra.ROUTE_TYPE(zebra.ROUTE_STATIC),
Type: zebra.RouteType(zebra.RouteStatic),
Flags: flag,
Message: message[v],
SAFI: zebra.SAFI(zebra.SAFI_UNICAST), // 1, FRR_ZAPI5_SAFI_UNICAST is same
Message: message,
Safi: zebra.Safi(zebra.SafiUnicast), // 1, FRR_ZAPI5_SAFI_UNICAST is same
Prefix: zebra.Prefix{
Prefix: net.ParseIP("192.168.100.0"),
PrefixLen: uint8(24),
@@ -102,11 +59,11 @@ func Test_newPathFromIPRouteMessage(t *testing.T) {
Distance: uint8(0),
Metric: uint32(100),
Mtu: uint32(0),
Api: zebra.API_TYPE(ipv4RouteAddCommand[v]),
API: zebra.APIType(zebra.RouteAdd.ToEach(v, "")),
}
m.Header = *h
m.Body = b
zebra.BackwardIPv6RouteDelete.ToEach(v, "")
path := newPathFromIPRouteMessage(m, v, "")
pp := table.NewPath(nil, path.GetNlri(), path.IsWithdraw, path.GetPathAttrs(), time.Now(), false)
pp.SetIsFromExternal(path.IsFromExternal())
@@ -116,8 +73,8 @@ func Test_newPathFromIPRouteMessage(t *testing.T) {
assert.False(pp.IsWithdraw)
// IPv4 Route Delete
h.Command = ipv4RouteDeleteCommand[v]
b.Api = ipv4RouteDeleteCommand[v]
h.Command = zebra.RouteDelete.ToEach(v, "")
b.API = zebra.RouteDelete.ToEach(v, "")
m.Header = *h
m.Body = b
@@ -132,8 +89,14 @@ func Test_newPathFromIPRouteMessage(t *testing.T) {
assert.True(pp.IsWithdraw)
// IPv6 Route Add
h.Command = ipv6RouteAddCommand[v]
b.Api = ipv6RouteAddCommand[v]
h.Command = zebra.RouteAdd.ToEach(v, "")
if v < 5 {
h.Command = zebra.BackwardIPv6RouteAdd.ToEach(v, "")
}
b.API = zebra.RouteAdd.ToEach(v, "")
if v < 5 {
b.API = zebra.BackwardIPv6RouteAdd.ToEach(v, "")
}
b.Prefix.Prefix = net.ParseIP("2001:db8:0:f101::")
b.Prefix.PrefixLen = uint8(64)
b.Nexthops = []zebra.Nexthop{{Gate: net.ParseIP("::")}}
@@ -151,8 +114,14 @@ func Test_newPathFromIPRouteMessage(t *testing.T) {
assert.False(pp.IsWithdraw)
// IPv6 Route Delete
h.Command = ipv6RouteDeleteCommand[v]
b.Api = ipv6RouteDeleteCommand[v]
h.Command = zebra.RouteDelete.ToEach(v, "")
if v < 5 {
h.Command = zebra.BackwardIPv6RouteDelete.ToEach(v, "")
}
b.API = zebra.RouteDelete.ToEach(v, "")
if v < 5 {
b.API = zebra.BackwardIPv6RouteDelete.ToEach(v, "")
}
m.Header = *h
m.Body = b
+1 -1
View File
@@ -1248,7 +1248,7 @@ module gobgp {
type string;
description
"Configure zebra software name.
quagga, frr3, frr4, frr5, frr6, frr7, frr7.1 and frr7.2 can be used.";
quagga, frr3, frr4, frr5, frr6, frr7, frr7.1, frr7.2, and frr7.3 can be used.";
}
}