github.com/osrg/gobgp@v2.0.0+incompatible/pkg/packet/bgp/helper.go (about) 1 // Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 12 // implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 16 package bgp 17 18 func NewTestBGPOpenMessage() *BGPMessage { 19 p1 := NewOptionParameterCapability( 20 []ParameterCapabilityInterface{NewCapRouteRefresh()}) 21 p2 := NewOptionParameterCapability( 22 []ParameterCapabilityInterface{NewCapMultiProtocol(RF_IPv4_UC)}) 23 g := &CapGracefulRestartTuple{4, 2, 3} 24 p3 := NewOptionParameterCapability( 25 []ParameterCapabilityInterface{NewCapGracefulRestart(false, true, 100, 26 []*CapGracefulRestartTuple{g})}) 27 p4 := NewOptionParameterCapability( 28 []ParameterCapabilityInterface{NewCapFourOctetASNumber(100000)}) 29 p5 := NewOptionParameterCapability( 30 []ParameterCapabilityInterface{NewCapAddPath([]*CapAddPathTuple{NewCapAddPathTuple(RF_IPv4_UC, BGP_ADD_PATH_BOTH)})}) 31 return NewBGPOpenMessage(11033, 303, "100.4.10.3", 32 []OptionParameterInterface{p1, p2, p3, p4, p5}) 33 } 34 35 func NewTestBGPUpdateMessage() *BGPMessage { 36 w1 := NewIPAddrPrefix(23, "121.1.3.2") 37 w2 := NewIPAddrPrefix(17, "100.33.3.0") 38 w := []*IPAddrPrefix{w1, w2} 39 40 aspath1 := []AsPathParamInterface{ 41 NewAsPathParam(2, []uint16{1000}), 42 NewAsPathParam(1, []uint16{1001, 1002}), 43 NewAsPathParam(2, []uint16{1003, 1004}), 44 } 45 46 aspath2 := []AsPathParamInterface{ 47 NewAs4PathParam(2, []uint32{1000000}), 48 NewAs4PathParam(1, []uint32{1000001, 1002}), 49 NewAs4PathParam(2, []uint32{1003, 100004}), 50 } 51 52 aspath3 := []*As4PathParam{ 53 NewAs4PathParam(2, []uint32{1000000}), 54 NewAs4PathParam(1, []uint32{1000001, 1002}), 55 NewAs4PathParam(2, []uint32{1003, 100004}), 56 } 57 58 isTransitive := true 59 60 ecommunities := []ExtendedCommunityInterface{ 61 NewTwoOctetAsSpecificExtended(EC_SUBTYPE_ROUTE_TARGET, 10003, 3<<20, isTransitive), 62 NewFourOctetAsSpecificExtended(EC_SUBTYPE_ROUTE_TARGET, 1<<20, 300, isTransitive), 63 NewIPv4AddressSpecificExtended(EC_SUBTYPE_ROUTE_TARGET, "192.2.1.2", 3000, isTransitive), 64 NewOpaqueExtended(false, []byte{1, 2, 3, 4, 5, 6, 7}), 65 NewValidationExtended(VALIDATION_STATE_INVALID), 66 NewUnknownExtended(99, []byte{0, 1, 2, 3, 4, 5, 6, 7}), 67 NewESILabelExtended(1000, true), 68 NewESImportRouteTarget("11:22:33:44:55:66"), 69 NewMacMobilityExtended(123, false), 70 } 71 72 prefixes1 := []AddrPrefixInterface{ 73 NewLabeledVPNIPAddrPrefix(24, "192.0.9.0", *NewMPLSLabelStack(1, 2, 3), 74 NewRouteDistinguisherTwoOctetAS(256, 10000)), 75 NewLabeledVPNIPAddrPrefix(24, "192.10.8.0", *NewMPLSLabelStack(5, 6, 7, 8), 76 NewRouteDistinguisherIPAddressAS("10.0.1.1", 10001)), 77 } 78 79 prefixes2 := []AddrPrefixInterface{NewIPv6AddrPrefix(128, 80 "fe80:1234:1234:5667:8967:af12:8912:1023")} 81 82 prefixes3 := []AddrPrefixInterface{NewLabeledVPNIPv6AddrPrefix(128, 83 "fe80:1234:1234:5667:8967:af12:1203:33a1", *NewMPLSLabelStack(5, 6), 84 NewRouteDistinguisherFourOctetAS(5, 6))} 85 86 prefixes4 := []AddrPrefixInterface{NewLabeledIPAddrPrefix(25, "192.168.0.0", 87 *NewMPLSLabelStack(5, 6, 7))} 88 89 prefixes5 := []AddrPrefixInterface{ 90 NewEVPNEthernetAutoDiscoveryRoute(NewRouteDistinguisherFourOctetAS(5, 6), EthernetSegmentIdentifier{ESI_ARBITRARY, make([]byte, 9)}, 2, 2), 91 NewEVPNMacIPAdvertisementRoute(NewRouteDistinguisherFourOctetAS(5, 6), EthernetSegmentIdentifier{ESI_ARBITRARY, make([]byte, 9)}, 3, "01:23:45:67:89:ab", "192.2.1.2", []uint32{3, 4}), 92 NewEVPNMulticastEthernetTagRoute(NewRouteDistinguisherFourOctetAS(5, 6), 3, "192.2.1.2"), 93 NewEVPNEthernetSegmentRoute(NewRouteDistinguisherFourOctetAS(5, 6), EthernetSegmentIdentifier{ESI_ARBITRARY, make([]byte, 9)}, "192.2.1.1"), 94 NewEVPNIPPrefixRoute(NewRouteDistinguisherFourOctetAS(5, 6), EthernetSegmentIdentifier{ESI_ARBITRARY, make([]byte, 9)}, 5, 24, "192.2.1.0", "192.3.1.1", 5), 95 } 96 97 p := []PathAttributeInterface{ 98 NewPathAttributeOrigin(3), 99 NewPathAttributeAsPath(aspath1), 100 NewPathAttributeAsPath(aspath2), 101 NewPathAttributeNextHop("129.1.1.2"), 102 NewPathAttributeMultiExitDisc(1 << 20), 103 NewPathAttributeLocalPref(1 << 22), 104 NewPathAttributeAtomicAggregate(), 105 NewPathAttributeAggregator(uint16(30002), "129.0.2.99"), 106 NewPathAttributeAggregator(uint32(30002), "129.0.2.99"), 107 NewPathAttributeAggregator(uint32(300020), "129.0.2.99"), 108 NewPathAttributeCommunities([]uint32{1, 3}), 109 NewPathAttributeOriginatorId("10.10.0.1"), 110 NewPathAttributeClusterList([]string{"10.10.0.2", "10.10.0.3"}), 111 NewPathAttributeExtendedCommunities(ecommunities), 112 NewPathAttributeAs4Path(aspath3), 113 NewPathAttributeAs4Aggregator(10000, "112.22.2.1"), 114 NewPathAttributeMpReachNLRI("112.22.2.0", prefixes1), 115 NewPathAttributeMpReachNLRI("1023::", prefixes2), 116 NewPathAttributeMpReachNLRI("fe80::", prefixes3), 117 NewPathAttributeMpReachNLRI("129.1.1.1", prefixes4), 118 NewPathAttributeMpReachNLRI("129.1.1.1", prefixes5), 119 NewPathAttributeMpUnreachNLRI(prefixes1), 120 //NewPathAttributeMpReachNLRI("112.22.2.0", []AddrPrefixInterface{}), 121 //NewPathAttributeMpUnreachNLRI([]AddrPrefixInterface{}), 122 NewPathAttributeUnknown(BGP_ATTR_FLAG_TRANSITIVE, 100, []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}), 123 } 124 n := []*IPAddrPrefix{NewIPAddrPrefix(24, "13.2.3.1")} 125 return NewBGPUpdateMessage(w, p, n) 126 }