7 #include <boost/foreach.hpp>
20 using boost::system::error_code;
27 namespace mpl = boost::mpl;
30 :
BgpMessage(OPEN), as_num(-1), holdtime(-1), identifier(-1) {
51 bool mp_extension_ok =
false;
54 for (vector<OptParam *>::const_iterator param_it = opt_params.begin();
55 param_it != opt_params.end(); ++param_it) {
59 for (vector<Capability *>::const_iterator cap_it =
65 if (cap->
code == Capability::MpExtension) {
71 mp_extension_ok =
true;
74 if (cap->
code == Capability::AS4Support &&
81 ", Configured peer ASN: " << peer->
peer_as());
88 if (!mp_extension_ok) {
91 Capability::CapabilityToString(Capability::MpExtension) <<
92 " (" << Capability::MpExtension <<
")");
107 if (identifier == 0) {
115 "Bad (Same as mine) BGP Identifier: " <<
125 return ValidateCapabilities(peer);
130 uint16_t gr_time,
bool restarted,
bool notification,
131 const vector<uint8_t> &gr_afi_flags,
132 const vector<Address::Family> &gr_families) {
133 assert((gr_time & ~RestartTimeMask) == 0);
134 uint16_t restart_flags = restarted ? RestartedFlag : 0;
135 restart_flags |= notification ? NotificationFlag : 0;
136 const uint16_t gr_bytes = restart_flags | gr_time;
138 vector<uint8_t> restart_cap;
139 restart_cap.push_back(gr_bytes >> 8);
140 restart_cap.push_back(gr_bytes & 0xFF);
147 restart_cap.push_back(0);
148 restart_cap.push_back(afi);
149 restart_cap.push_back(safi);
150 restart_cap.push_back(gr_afi_flags[i++]);
152 return new Capability(GracefulRestart, restart_cap.data(),
157 vector<string> *families) {
170 sort(families->begin(), families->end());
171 families->erase(unique(families->begin(), families->end()),
176 const vector<Capability *> &capabilities) {
182 for (vector<Capability *>::const_iterator cap_it = capabilities.begin();
183 cap_it != capabilities.end(); ++cap_it) {
184 if ((*cap_it)->code != GracefulRestart)
189 uint8_t *data = (*cap_it)->capability.data();
195 while (offset < (*cap_it)->capability.size()) {
196 uint16_t afi =
get_value(data + offset, 2);
197 uint8_t safi =
get_value(data + offset + 2, 1);
198 uint8_t flags =
get_value(data + offset + 3, 1);
208 uint8_t llgr_afi_flags,
const vector<Address::Family> &llgr_families) {
209 assert((llgr_time & ~RestartTimeMask) == 0);
210 vector<uint8_t> llgr_cap;
215 llgr_cap.push_back(0);
216 llgr_cap.push_back(afi);
217 llgr_cap.push_back(safi);
218 llgr_cap.push_back(llgr_afi_flags);
219 llgr_cap.push_back((llgr_time & 0x00FF0000) >> 16);
220 llgr_cap.push_back((llgr_time & 0x0000FF00) >> 8);
221 llgr_cap.push_back((llgr_time & 0x000000FF) >> 0);
223 return new Capability(LongLivedGracefulRestart, llgr_cap.data(),
228 const vector<Capability *> &capabilities) {
234 for (vector<Capability *>::const_iterator cap_it = capabilities.begin();
235 cap_it != capabilities.end(); ++cap_it) {
236 if ((*cap_it)->code != LongLivedGracefulRestart)
241 uint8_t *data = (*cap_it)->capability.data();
243 uint32_t max_time = 0;
244 while (offset < (*cap_it)->capability.size()) {
245 uint16_t afi =
get_value(data + offset, 2);
246 uint8_t safi =
get_value(data + offset + 2, 1);
247 uint8_t flags =
get_value(data + offset + 3, 1);
248 uint32_t time =
get_value(data + offset + 4, 3);
255 llgr_params->
time = max_time;
261 const LLGR &llgr_params, vector<string> *families) {
275 sort(families->begin(), families->end());
276 families->erase(unique(families->begin(), families->end()),
281 std::ostringstream os;
284 os <<
"AS " << as_num;
285 os <<
", Hold Time " << holdtime;
286 os <<
", Identifier " <<
Ip4Address(identifier).to_string(ec);
289 for (vector<OptParam *>::const_iterator param_it = opt_params.begin();
290 param_it != opt_params.end(); ++param_it) {
294 vector<Capability *>::const_iterator cap_it =
299 os <<
", Code " << Capability::CapabilityToString(cap->
code);
301 if (cap->
code == Capability::MpExtension) {
314 if (Capability::GR::Decode(&gr_params, param->
capabilities)) {
315 os <<
", GR_Flags 0x" << std::hex << int(gr_params.
flags);
316 os <<
", GR_Time " << gr_params.
time;
318 os <<
", GR_family " <<
320 os <<
", GR_family_flags 0x" << std::hex << int(family.
flags);
325 if (Capability::LLGR::Decode(&llgr_params, param->
capabilities)) {
328 os <<
", LLGR_family " <<
330 os <<
", LLGR_family_flags 0x" << std::hex << int(family.
flags);
331 os <<
", LLGR_Time " << family.
time <<
" Seconds";
344 return toString(static_cast<BgpProto::Notification::Code>(error), subcode);
352 msg += string(
"Message Header Error:") +
353 MsgHdrSubcodeToString(static_cast<MsgHdrSubCode>(sub_code));
356 msg += string(
"OPEN Message Error:") +
357 OpenMsgSubcodeToString(static_cast<OpenMsgSubCode>(sub_code));
360 msg += string(
"UPDATE Message Error:") +
361 UpdateMsgSubCodeToString(
362 static_cast<UpdateMsgSubCode>(sub_code));
365 msg +=
"Hold Timer Expired";
368 msg += string(
"Finite State Machine Error:") +
369 FsmSubcodeToString(static_cast<FsmSubcode>(sub_code));
372 msg += string(
"Cease:") +
373 CeaseSubcodeToString(static_cast<CeaseSubCode>(sub_code));
409 std::sort(path_attributes.begin(), path_attributes.end(), comp);
410 bool origin =
false, nh =
false, as_path =
false, mp_reach_nlri =
false,
415 BgpAttrSpec::const_iterator it;
416 string rxed_attr(
"Path attributes : ");
417 for (it = path_attributes.begin(); it < path_attributes.end(); it++) {
418 if (it+1 < path_attributes.end() && (*it)->code == (*(it+1))->code) {
423 rxed_attr += (*it)->ToString() +
" ";
453 mp_reach_nlri =
true;
460 if (nlri.size() > 0 && !nh) {
463 *data = string(&attrib_type, 1);
466 if (nlri.size() > 0 || mp_reach_nlri) {
470 *data = string(&attrib_type, 1);
475 *data = string(&attrib_type, 1);
480 if (ibgp && !local_pref) {
483 *data = string(&attrib_type, 1);
492 for (
size_t i = 0; i < withdrawn_routes.size(); i++) {
503 cout <<
"Unequal " <<
TYPE_NAME(*path_attributes[i]) << endl;
509 for (
size_t i = 0; i < rhs.
nlri.size(); i++) {
518 static const int kSize = 16;
521 static bool Verifier(
const void *obj,
const uint8_t *data,
size_t size,
523 for (
int i = 0; i < 16; i++) {
524 if (data[i] != 0xff)
return false;
528 static void Writer(
const void *msg, uint8_t *data,
size_t size) {
529 for (
int i = 0; i < 16; i++) {
537 static const int kSize = 2;
542 return "BgpMsgLength";
546 static bool Verifier(
const void *obj,
const uint8_t *data,
size_t size,
553 if ((
size_t) value < context->offset() + size) {
560 int offset,
int element_size) {
570 static const int kSize = 1;
573 static bool Verifier(
const void * obj,
const uint8_t *data,
size_t size,
575 return data[0] == 0x4;
577 static void Writer(
const void *msg, uint8_t *data,
size_t size) {
584 static const int kSize = 2;
591 static const int kSize = 2;
593 static const int kErrorSubcode =
598 return (value == 0 || value >= 3);
606 static const int kSize = 4;
613 static const int kSize = 1;
620 static const int kSize = 1;
626 static const int kSize = -1;
639 static const int kSize = 1;
640 static const int kMinOccurs = 0;
641 static const int kMaxOccurs = -1;
645 vector<BgpProto::OpenMessage::Capability *>,
658 static const int kSize = 1;
660 static const int kErrorSubcode =
663 mpl::pair<mpl::int_<BgpProto::OpenMessage::OPEN_OPT_CAPABILITIES>,
670 static const int kSize = 1;
671 static const int kMinOccurs = 0;
672 static const int kMaxOccurs = -1;
674 vector<BgpProto::OpenMessage::OptParam *>,
691 static const int kSize = 1;
698 static const int kSize = 1;
705 static const int kSize = -1;
726 static const int kSize = 1;
730 return (bits + 7) / 8;
740 static const int kSize = -1;
748 static const int kSize = 2;
749 static const int kMinOccurs = 0;
750 static const int kMaxOccurs = -1;
752 static const int kErrorSubcode =
756 vector<BgpProtoPrefix *>,
766 typedef mpl::list<BgpPrefixLen, BgpPrefixAddress>
Sequence;
771 static const int kSize = -1;
774 const uint8_t *data,
size_t &size) {
798 template <
class Derived>
801 return new Derived(*attr);
807 static bool Verifier(
const C *obj,
const uint8_t *data,
size_t size,
811 static_cast<int>(context->
total_size()) != C::kSize) {
834 if (context->
size() != 1) {
837 "BgpAttrOrigin", data - pre, size + pre);
843 "BgpAttrOrigin", data - pre, size + pre);
846 uint8_t value = data[0];
851 "BgpAttrOrigin", data - pre, size + pre);
866 "BgpAttrNextHop", data - pre, size + pre);
872 "BgpAttrNextHop", data - pre, size + pre);
880 "BgpAttrNextHop", data - pre, size + pre);
890 const uint8_t *data,
size_t size,
899 const uint8_t *data,
size_t size,
908 const uint8_t *data,
size_t size,
914 template <
int Size,
class C,
typename T, T C::*Member>
916 public ProtoElement<BgpAttributeValue<Size, C, T, Member> > {
918 static const int kSize = Size;
919 static bool Verifier(
const C *obj,
const uint8_t *data,
size_t size,
926 template <
class C,
int Size,
typename T, T C::*M>
934 typedef mpl::list<BgpPathAttrLength, BgpAttributeValue<Size, C, T, M>
942 const uint8_t *data,
size_t size,
947 "BgpAttrAtomicAggregate", data - 2, data[0] + 3);
953 "BgpAttrAtomicAggregate", data - 2, 3);
1005 static const int kSize = 1;
1008 const uint8_t *data,
size_t size) {
1015 int offset,
int element_size) {
1024 public ProtoElement<BgpPathAttrAsPath4ByteSegmentLength> {
1026 static const int kSize = 1;
1029 const uint8_t *data,
size_t size) {
1036 int offset,
int element_size) {
1047 static const int kSize = 1;
1050 const uint8_t *data,
size_t size) {
1057 int offset,
int element_size) {
1069 static const int kSize = -1;
1075 public ProtoElement<BgpPathAttrAsPath4ByteSegmentValue> {
1077 static const int kSize = -1;
1085 static const int kSize = -1;
1093 static const int kMinOccurs = 0;
1094 static const int kMaxOccurs = -1;
1103 vector<AsPathSpec::PathSegment *>,
1116 static const int kMinOccurs = 0;
1117 static const int kMaxOccurs = -1;
1126 vector<AsPath4ByteSpec::PathSegment *>,
1139 static const int kMinOccurs = 0;
1140 static const int kMaxOccurs = -1;
1149 vector<As4PathSpec::PathSegment *>,
1163 typedef mpl::list<BgpPathAttrLength, BgpPathAttrAsPathSegmentList>
Sequence;
1179 typedef mpl::list<BgpPathAttrLength, BgpPathAttrAs4PathSegmentList>
Sequence;
1184 static const int kSize = 1;
1190 return obj->GetEncodeFlags();
1199 static const int kSize = -1;
1220 public ProtoElement<BgpPathAttributeExtendedCommunityList> {
1222 static const int kSize = -1;
1245 static const int kSize = -1;
1262 static const int kSize = -1;
1278 typedef mpl::list<BgpPathAttrLength, BgpPathAttributeOriginVnList>
Sequence;
1282 public ProtoElement<BgpPathAttributePmsiTunnelIdentifier> {
1284 static const int kSize = -1;
1288 obj, data, size, context);
1311 public ProtoElement<BgpPathAttributeDiscoveryEdgeAddressLen> {
1313 static const int kSize = 1;
1314 static bool Verifier(
const void *obj,
const uint8_t *data,
1317 return (value == 4);
1323 public ProtoElement<BgpPathAttributeDiscoveryEdgeAddressValue> {
1325 static const int kSize = -1;
1331 public ProtoSequence<BgpPathAttributeDiscoveryEdgeAddress> {
1338 public ProtoElement<BgpPathAttributeDiscoveryEdgeLabelLen> {
1340 static const int kSize = 1;
1341 static bool Verifier(
const void *obj,
const uint8_t *data,
1344 return (value > 0 && value % 8 == 0);
1350 public ProtoElement<BgpPathAttributeDiscoveryEdgeLabelValues> {
1352 static const int kSize = -1;
1367 static const int kMinOccurs = 1;
1368 static const int kMaxOccurs = -1;
1373 obj, data, size, context);
1377 vector<EdgeDiscoverySpec::Edge *>,
1394 public ProtoElement<BgpPathAttributeForwardingEdgeLen> {
1396 static const int kSize = 1;
1397 static bool Verifier(
const void *obj,
const uint8_t *data,
1400 return (value == 4);
1404 const uint8_t *data,
size_t size) {
1412 int offset,
int element_size) {
1421 public ProtoElement<BgpPathAttributeForwardingEdgeAddressLen> {
1423 static const int kSize = 0;
1426 const uint8_t *data,
size_t size) {
1434 public ProtoElement<BgpPathAttributeForwardingEdgeInAddressValue> {
1436 static const int kSize = -1;
1442 public ProtoSequence<BgpPathAttributeForwardingEdgeInAddress> {
1444 static const int kMinOccurs = 1;
1445 static const int kMaxOccurs = 1;
1451 public ProtoElement<BgpPathAttributeForwardingEdgeInLabel> {
1453 static const int kSize = 4;
1459 public ProtoElement<BgpPathAttributeForwardingEdgeOutAddressValue> {
1461 static const int kSize = -1;
1467 public ProtoSequence<BgpPathAttributeForwardingEdgeOutAddress> {
1469 static const int kMinOccurs = 1;
1470 static const int kMaxOccurs = 1;
1476 public ProtoElement<BgpPathAttributeForwardingEdgeOutLabel> {
1478 static const int kSize = 4;
1486 static const int kMinOccurs = 1;
1487 static const int kMaxOccurs = -1;
1492 obj, data, size, context);
1496 vector<EdgeForwardingSpec::Edge *>,
1517 static const int kSize = 1;
1518 static void Writer(
const void *msg, uint8_t *data,
size_t size) {
1524 public ProtoElement<BgpPathAttributeMpNlriNextHopLength> {
1526 static const int kSize = 1;
1528 static const int kErrorSubcode =
1534 uint16_t afi = obj->
afi;
1535 uint8_t safi = obj->
safi;
1562 public ProtoElement<BgpPathAttributeMpNlriNexthopAddr> {
1564 static const int kSize = -1;
1577 static const int kMinOccurs = 0;
1578 static const int kMaxOccurs = -1;
1594 typedef mpl::list<BgpPrefixLen, BgpPrefixAddress>
Sequence;
1599 static const int kSize = 1;
1606 static const int kSize = 1;
1614 return obj->prefixlen / 8;
1627 static const int kMinOccurs = 0;
1628 static const int kMaxOccurs = -1;
1647 static const int kSize = 1;
1654 static const int kSize = 1;
1662 return obj->prefixlen / 8;
1675 static const int kMinOccurs = 0;
1676 static const int kMaxOccurs = -1;
1695 static const int kSize = 1;
1702 static const int kSize = 1;
1710 return obj->prefixlen / 8;
1723 static const int kMinOccurs = 0;
1724 static const int kMaxOccurs = -1;
1740 public ProtoChoice<BgpPathAttributeMpNlriChoice> {
1742 static const int kSize = 0;
1820 return "MpReachUnreachNlri";
1835 public ProtoSequence<BgpPathAttributeMpUnreachNlriSequence> {
1839 return "MpReachUnreachNlri";
1853 static const int kSize = -1;
1860 "BgpAttrUnknown", data - pre, context->
size() + pre);
1873 typedef mpl::list<BgpPathAttrLength, BgpPathAttrUnknownValue>
Sequence;
1878 static const int kSize = 1;
1882 mpl::pair<mpl::int_<BgpAttribute::Origin>,
1887 mpl::pair<mpl::int_<BgpAttribute::NextHop>,
1890 mpl::pair<mpl::int_<BgpAttribute::MultiExitDisc>,
1893 mpl::pair<mpl::int_<BgpAttribute::LocalPref>,
1896 mpl::pair<mpl::int_<BgpAttribute::AtomicAggregate>,
1898 mpl::pair<mpl::int_<BgpAttribute::Aggregator>,
1900 mpl::pair<mpl::int_<BgpAttribute::As4Aggregator>,
1902 mpl::pair<mpl::int_<BgpAttribute::Communities>,
1904 mpl::pair<mpl::int_<BgpAttribute::OriginatorId>,
1907 mpl::pair<mpl::int_<BgpAttribute::ClusterList>,
1909 mpl::pair<mpl::int_<BgpAttribute::MPReachNlri>,
1911 mpl::pair<mpl::int_<BgpAttribute::MPUnreachNlri>,
1913 mpl::pair<mpl::int_<BgpAttribute::ExtendedCommunities>,
1915 mpl::pair<mpl::int_<BgpAttribute::PmsiTunnel>,
1917 mpl::pair<mpl::int_<BgpAttribute::McastEdgeDiscovery>,
1919 mpl::pair<mpl::int_<BgpAttribute::McastEdgeForwarding>,
1921 mpl::pair<mpl::int_<BgpAttribute::OriginVnPath>,
1929 static const int kSize = 1;
1933 mpl::pair<mpl::int_<BgpAttribute::Origin>,
1936 mpl::pair<mpl::int_<BgpAttribute::AsPath>,
1939 mpl::pair<mpl::int_<BgpAttribute::NextHop>,
1942 mpl::pair<mpl::int_<BgpAttribute::MultiExitDisc>,
1945 mpl::pair<mpl::int_<BgpAttribute::LocalPref>,
1948 mpl::pair<mpl::int_<BgpAttribute::AtomicAggregate>,
1950 mpl::pair<mpl::int_<BgpAttribute::Aggregator>,
1952 mpl::pair<mpl::int_<BgpAttribute::As4Aggregator>,
1954 mpl::pair<mpl::int_<BgpAttribute::Communities>,
1956 mpl::pair<mpl::int_<BgpAttribute::OriginatorId>,
1959 mpl::pair<mpl::int_<BgpAttribute::ClusterList>,
1961 mpl::pair<mpl::int_<BgpAttribute::MPReachNlri>,
1963 mpl::pair<mpl::int_<BgpAttribute::MPUnreachNlri>,
1965 mpl::pair<mpl::int_<BgpAttribute::ExtendedCommunities>,
1967 mpl::pair<mpl::int_<BgpAttribute::PmsiTunnel>,
1969 mpl::pair<mpl::int_<BgpAttribute::McastEdgeDiscovery>,
1971 mpl::pair<mpl::int_<BgpAttribute::McastEdgeForwarding>,
1973 mpl::pair<mpl::int_<BgpAttribute::OriginVnPath>,
1981 static const int kSize = 2;
1982 static const int kMinOccurs = 0;
1983 static const int kMaxOccurs = -1;
1985 static const int kErrorSubcode =
1989 return "BgpPathAttribute";
1994 vector<BgpAttribute *>,
1996 typedef mpl::list<BgpPathAttributeFlags, BgpPathAttribute>
Sequence;
2001 static const int kSize = 2;
2002 static const int kMinOccurs = 0;
2003 static const int kMaxOccurs = -1;
2005 static const int kErrorSubcode =
2009 return "BgpPathAttribute";
2014 vector<BgpAttribute *>,
2016 typedef mpl::list<BgpPathAttributeFlags, BgpPathAttributeAs4>
Sequence;
2021 static const int kMinOccurs = 0;
2022 static const int kMaxOccurs = -1;
2025 vector<BgpProtoPrefix *>,
2030 return !ctx->
nlri.empty();
2034 typedef mpl::list<BgpPrefixLen, BgpPrefixAddress>
Sequence;
2053 static const int kSize = 1;
2066 static const int kSize = 1;
2079 typedef mpl::list<BgpMarker, BgpMsgLength, BgpMsgType>
Sequence;
2084 typedef mpl::list<BgpMarker, BgpMsgLength, BgpMsgTypeAs4>
Sequence;
2093 reinterpret_cast<void *>(NULL));
2096 reinterpret_cast<void *>(NULL));
mpl::map< mpl::pair< mpl::int_< BgpAttribute::Origin >, BgpAttrTemplate< BgpAttrOrigin, 1, int,&BgpAttrOrigin::origin > >, mpl::pair< mpl::int_< BgpAttribute::AsPath >, BgpPathAttributeAsPath >, mpl::pair< mpl::int_< BgpAttribute::As4Path >, BgpPathAttributeAs4Path >, mpl::pair< mpl::int_< BgpAttribute::NextHop >, BgpAttrTemplate< BgpAttrNextHop, 4, uint32_t,&BgpAttrNextHop::nexthop > >, mpl::pair< mpl::int_< BgpAttribute::MultiExitDisc >, BgpAttrTemplate< BgpAttrMultiExitDisc, 4, uint32_t,&BgpAttrMultiExitDisc::med > >, mpl::pair< mpl::int_< BgpAttribute::LocalPref >, BgpAttrTemplate< BgpAttrLocalPref, 4, uint32_t,&BgpAttrLocalPref::local_pref > >, mpl::pair< mpl::int_< BgpAttribute::AtomicAggregate >, BgpPathAttributeAtomicAggregate >, mpl::pair< mpl::int_< BgpAttribute::Aggregator >, BgpPathAttributeAggregator >, mpl::pair< mpl::int_< BgpAttribute::As4Aggregator >, BgpPathAttributeAs4Aggregator >, mpl::pair< mpl::int_< BgpAttribute::Communities >, BgpPathAttributeCommunities >, mpl::pair< mpl::int_< BgpAttribute::OriginatorId >, BgpAttrTemplate< BgpAttrOriginatorId, 4, uint32_t,&BgpAttrOriginatorId::originator_id > >, mpl::pair< mpl::int_< BgpAttribute::ClusterList >, BgpPathAttributeClusterList >, mpl::pair< mpl::int_< BgpAttribute::MPReachNlri >, BgpPathAttributeMpReachNlriSequence >, mpl::pair< mpl::int_< BgpAttribute::MPUnreachNlri >, BgpPathAttributeMpUnreachNlriSequence >, mpl::pair< mpl::int_< BgpAttribute::ExtendedCommunities >, BgpPathAttributeExtendedCommunities >, mpl::pair< mpl::int_< BgpAttribute::PmsiTunnel >, BgpPathAttributePmsiTunnel >, mpl::pair< mpl::int_< BgpAttribute::McastEdgeDiscovery >, BgpPathAttributeEdgeDiscovery >, mpl::pair< mpl::int_< BgpAttribute::McastEdgeForwarding >, BgpPathAttributeEdgeForwarding >, mpl::pair< mpl::int_< BgpAttribute::OriginVnPath >, BgpPathAttributeOriginVnPath >, mpl::pair< mpl::int_<-1 >, BgpPathAttributeUnknown > > Choice
static bool Verifier(const void *obj, const uint8_t *data, size_t size, ParseContext *context)
Accessor< C, T, Member > Setter
std::vector< Family > families
virtual const std::string ToString() const
mpl::list< BgpPathAttrLength, BgpPathAttributeClusterListData > Sequence
static bool Verifier(const C *obj, const uint8_t *data, size_t size, ParseContext *context)
bool match(const BgpProto::Update *ctx)
BgpContextSwap< ExtCommunitySpec > ContextSwap
static void Writer(const void *msg, uint8_t *data, size_t size)
std::vector< uint8_t > value
int Validate(BgpPeer *peer) const
CollectionAccessor< AsPath4ByteSpec, vector< AsPath4ByteSpec::PathSegment * >,&AsPath4ByteSpec::path_segments > ContextStorer
std::vector< BgpProtoPrefix * > nlri
int operator()(AsPathSpec::PathSegment *obj, const uint8_t *data, size_t size)
BgpContextSwap< BgpMpNlri > ContextSwap
Accessor< EdgeForwardingSpec::Edge, uint32_t,&EdgeForwardingSpec::Edge::outbound_label > Setter
void STLDeleteValues(Container *container)
BgpProto::Keepalive ContextType
static Capability * Encode(uint16_t gr_time, bool restarted, bool notification, const std::vector< uint8_t > &gr_afi_flags, const std::vector< Address::Family > &gr_families)
static bool Verifier(const AsPathSpec *obj, const uint8_t *data, size_t size, ParseContext *context)
mpl::map< mpl::pair< mpl::int_< BgpProto::OpenMessage::OPEN_OPT_CAPABILITIES >, BgpOpenCapabilities > > Choice
SetLength EncodingCallback
mpl::map< mpl::pair< mpl::int_< BgpAttribute::Origin >, BgpAttrTemplate< BgpAttrOrigin, 1, int,&BgpAttrOrigin::origin > >, mpl::pair< mpl::int_< BgpAttribute::AsPath >, BgpPathAttributeAsPath4Byte >, mpl::pair< mpl::int_< BgpAttribute::As4Path >, BgpPathAttributeAs4Path >, mpl::pair< mpl::int_< BgpAttribute::NextHop >, BgpAttrTemplate< BgpAttrNextHop, 4, uint32_t,&BgpAttrNextHop::nexthop > >, mpl::pair< mpl::int_< BgpAttribute::MultiExitDisc >, BgpAttrTemplate< BgpAttrMultiExitDisc, 4, uint32_t,&BgpAttrMultiExitDisc::med > >, mpl::pair< mpl::int_< BgpAttribute::LocalPref >, BgpAttrTemplate< BgpAttrLocalPref, 4, uint32_t,&BgpAttrLocalPref::local_pref > >, mpl::pair< mpl::int_< BgpAttribute::AtomicAggregate >, BgpPathAttributeAtomicAggregate >, mpl::pair< mpl::int_< BgpAttribute::Aggregator >, BgpPathAttributeAggregator4Byte >, mpl::pair< mpl::int_< BgpAttribute::As4Aggregator >, BgpPathAttributeAs4Aggregator >, mpl::pair< mpl::int_< BgpAttribute::Communities >, BgpPathAttributeCommunities >, mpl::pair< mpl::int_< BgpAttribute::OriginatorId >, BgpAttrTemplate< BgpAttrOriginatorId, 4, uint32_t,&BgpAttrOriginatorId::originator_id > >, mpl::pair< mpl::int_< BgpAttribute::ClusterList >, BgpPathAttributeClusterList >, mpl::pair< mpl::int_< BgpAttribute::MPReachNlri >, BgpPathAttributeMpReachNlriSequence >, mpl::pair< mpl::int_< BgpAttribute::MPUnreachNlri >, BgpPathAttributeMpUnreachNlriSequence >, mpl::pair< mpl::int_< BgpAttribute::ExtendedCommunities >, BgpPathAttributeExtendedCommunities >, mpl::pair< mpl::int_< BgpAttribute::PmsiTunnel >, BgpPathAttributePmsiTunnel >, mpl::pair< mpl::int_< BgpAttribute::McastEdgeDiscovery >, BgpPathAttributeEdgeDiscovery >, mpl::pair< mpl::int_< BgpAttribute::McastEdgeForwarding >, BgpPathAttributeEdgeForwarding >, mpl::pair< mpl::int_< BgpAttribute::OriginVnPath >, BgpPathAttributeOriginVnPath >, mpl::pair< mpl::int_<-1 >, BgpPathAttributeUnknown > > Choice
VectorAccessor< PmsiTunnelSpec, uint8_t,&PmsiTunnelSpec::identifier > Setter
BgpContextSwap< BgpAttrAtomicAggregate > ContextSwap
std::vector< uint8_t > outbound_address
static void set(BgpProtoPrefix *obj, int value)
mpl::list< BgpPathAttributeDiscoveryEdgeLabelLen, BgpPathAttributeDiscoveryEdgeLabelValues > Sequence
static void GetFamilies(const LLGR &llgr_params, std::vector< std::string > *families)
mpl::list< BgpPrefixLen, BgpPrefixAddress > Sequence
static void Writer(const void *msg, uint8_t *data, size_t size)
mpl::list< BgpPathAttrLength, BgpPathAttrAsPath4ByteSegmentList > Sequence
mpl::list< BgpPathAttrLength, BgpPathAttributeOriginVnList > Sequence
static bool Verifier(const void *obj, const uint8_t *data, size_t size, ParseContext *context)
mpl::list< BgpPathAttrLength, BgpAttributeValue< 2, BgpAttrAggregator, as2_t,&BgpAttrAggregator::as_num >, BgpAttributeValue< 4, BgpAttrAggregator, uint32_t,&BgpAttrAggregator::address > > Sequence
static bool Verifier(const AsPath4ByteSpec::PathSegment *obj, const uint8_t *data, size_t size, ParseContext *context)
static const uint8_t kFlags
std::vector< BgpProtoPrefix * > nlri
static const map< MatchProtocol::MatchProtocolType, string > toString
std::vector< PathSegment * > path_segments
AsPath4ByteSpec ContextType
mpl::list< BgpMarker, BgpMsgLength, BgpMsgType > Sequence
#define KEY_COMPARE(x, y)
mpl::list< BgpOpenOptParamChoice > Sequence
static Address::Family AfiSafiToFamily(uint16_t afi, uint8_t safi)
static bool Verifier(const void *obj, const uint8_t *data, size_t size, ParseContext *context)
bool LookupFamily(Address::Family family)
static const uint8_t kFlags
mpl::map< mpl::pair< mpl::int_< 0 >, BgpPathAttributeMpNlri >, mpl::pair< mpl::int_< 1 >, BgpPathAttributeMpEvpnNlri >, mpl::pair< mpl::int_< 2 >, BgpPathAttributeMpErmVpnNlri >, mpl::pair< mpl::int_< 3 >, BgpPathAttributeMpMvpnNlri > > Choice
int operator()(BgpProtoPrefix *obj, const uint8_t *data, size_t size)
std::vector< uint8_t > address
CollectionAccessor< BgpMpNlri, vector< BgpProtoPrefix * >,&BgpMpNlri::nlri > ContextStorer
#define BGP_LOG_PEER_WARNING(type, peer, flags, dir, arg)
mpl::list< BgpPathAttrLength, BgpPathAttrAsPathSegmentList > Sequence
bool match(const BgpMpNlri *obj)
void set_time(uint16_t gr_cap_bytes)
VectorAccessor< BgpProto::OpenMessage::Capability, uint8_t,&BgpProto::OpenMessage::Capability::capability > Setter
mpl::list< BgpPathAttributeDiscoveryEdgeAddress, BgpPathAttributeDiscoveryEdgeLabels > Sequence
mpl::list< BgpPathAttrLength, BgpPathAttributeCommunityList > Sequence
std::vector< as_t > path_segment
Accessor< EdgeForwardingSpec::Edge, uint32_t,&EdgeForwardingSpec::Edge::inbound_label > Setter
Accessor< BgpProto::OpenMessage, int32_t,&BgpProto::OpenMessage::holdtime > Setter
VectorAccessor< AsPath4ByteSpec::PathSegment, as_t,&AsPath4ByteSpec::PathSegment::path_segment > Setter
size_t total_size() const
virtual BgpProto::BgpPeerType PeerType() const
VectorAccessor< EdgeForwardingSpec::Edge, uint8_t,&EdgeForwardingSpec::Edge::inbound_address > Setter
mpl::list< BgpOpenVersion, BgpOpenAsNum, BgpHoldTime, BgpIdentifier, BgpOpenOptParam > Sequence
bool match(const BgpMpNlri *obj)
static uint16_t get_short(const void *ptr)
void SetError(int error, int subcode, std::string type, const uint8_t *data, int data_size)
BgpContextSwap< BgpAttr4ByteAggregator > ContextSwap
mpl::list< BgpAttributeValue< 1, AsPathSpec::PathSegment, int,&AsPathSpec::PathSegment::path_segment_type >, BgpPathAttrAsPathSegmentLength, BgpPathAttrAsPathSegmentValue > Sequence
mpl::list< BgpMarker, BgpMsgLength, BgpMsgTypeAs4 > Sequence
static bool Decode(GR *gr_params, const std::vector< Capability * > &capabilities)
VectorAccessor< BgpMpNlri, uint8_t,&BgpMpNlri::nexthop > Setter
Accessor< BgpProto::Notification, int,&BgpProto::Notification::error > Setter
static uint64_t get_value(const uint8_t *data, int size)
int operator()(BgpAttribute *obj, const uint8_t *data, size_t &size)
Accessor< BgpProtoPrefix, int,&BgpProtoPrefix::prefixlen > Setter
std::vector< uint32_t > cluster_list
Accessor< BgpProto::Notification, string,&BgpProto::Notification::data > Setter
static const int kMinMessageSize
static bool Verifier(const void *obj, const uint8_t *data, size_t size, ParseContext *context)
mpl::list< BgpPrefixLen, BgpPrefixAddress > Sequence
mpl::list< BgpPathAttrLength, BgpAttributeValue< 1, PmsiTunnelSpec, uint8_t,&PmsiTunnelSpec::tunnel_flags >, BgpAttributeValue< 1, PmsiTunnelSpec, uint8_t,&PmsiTunnelSpec::tunnel_type >, BgpAttributeValue< 3, PmsiTunnelSpec, uint32_t,&PmsiTunnelSpec::label >, BgpPathAttributePmsiTunnelIdentifier > Sequence
mpl::list< BgpPathAttrLength, BgpAttributeValue< 4, BgpAttr4ByteAggregator, as_t,&BgpAttr4ByteAggregator::as_num >, BgpAttributeValue< 4, BgpAttr4ByteAggregator, uint32_t,&BgpAttr4ByteAggregator::address > > Sequence
static bool Verifier(const OriginVnPathSpec *obj, const uint8_t *data, size_t size, ParseContext *context)
static bool Verifier(const void *obj, const uint8_t *data, size_t size, ParseContext *context)
Accessor< BgpProto::OpenMessage, uint32_t,&BgpProto::OpenMessage::identifier > Setter
CollectionAccessor< BgpProto::Update, vector< BgpProtoPrefix * >,&BgpProto::Update::nlri > ContextStorer
PathSegmentLength SequenceLength
std::vector< OptParam * > opt_params
CollectionAccessor< BgpMpNlri, vector< BgpProtoPrefix * >,&BgpMpNlri::nlri > ContextStorer
BgpAttrAtomicAggregate ContextType
std::vector< PathSegment * > path_segments
Derived * operator()(const BgpAttribute *attr)
static const size_t kSize
virtual BgpServer * server()
PmsiTunnelSpec ContextType
CollectionAccessor< BgpProto::Update, vector< BgpAttribute * >,&BgpProto::Update::path_attributes > ContextStorer
VectorAccessor< ClusterListSpec, uint32_t,&ClusterListSpec::cluster_list > Setter
mpl::list< BgpPathAttrLength, BgpAttributeValue< Size, C, T, M > > Sequence
int CompareTo(const Update &rhs) const
bool operator()(BgpAttribute *lhs, BgpAttribute *rhs)
mpl::list< BgpEvpnNlriType, BgpEvpnNlriLen, BgpPrefixAddress > Sequence
mpl::list< BgpOpenCapabilityCode, BgpOpenCapabilityLength, BgpOpenCapabilityValue > Sequence
BgpContextSwap< C > ContextSwap
static bool Verifier(const AsPathSpec::PathSegment *obj, const uint8_t *data, size_t size, ParseContext *context)
VectorAccessor< AsPathSpec::PathSegment, as2_t,&AsPathSpec::PathSegment::path_segment > Setter
static BgpMessage * Decode(const uint8_t *data, size_t size, ParseErrorContext *ec=NULL, bool as4=false)
VectorAccessor< OriginVnPathSpec, uint64_t,&OriginVnPathSpec::origin_vns > Setter
CollectionAccessor< BgpProto::OpenMessage, vector< BgpProto::OpenMessage::OptParam * >,&BgpProto::OpenMessage::opt_params > ContextStorer
mpl::list< BgpErmVpnNlriType, BgpErmVpnNlriLen, BgpPrefixAddress > Sequence
mpl::list< BgpPathAttrLength, BgpAttributeValue< 2, BgpMpNlri, uint16_t,&BgpMpNlri::afi >, BgpAttributeValue< 1, BgpMpNlri, uint8_t,&BgpMpNlri::safi >, BgpPathAttributeMpNlriChoice > Sequence
mpl::list< BgpPathAttrLength > Sequence
int operator()(EdgeForwardingSpec::Edge *obj, const uint8_t *data, size_t size)
std::vector< BgpProtoPrefix * > withdrawn_routes
static int Encode(const BgpMessage *msg, uint8_t *data, size_t size, EncodeOffsets *offsets=NULL, bool as4=false)
static bool Verifier(const EdgeDiscoverySpec *obj, const uint8_t *data, size_t size, ParseContext *context)
static bool Verifier(const C *obj, const uint8_t *data, size_t size, ParseContext *context)
static void set(BgpProtoPrefix *obj, int value)
CollectionAccessor< AsPathSpec, vector< AsPathSpec::PathSegment * >,&AsPathSpec::path_segments > ContextStorer
std::vector< Family > families
SetLength EncodingCallback
static const uint8_t kMaxV4Bytes
std::vector< uint8_t > prefix
static void GetFamilies(const GR &gr_params, std::vector< std::string > *families)
virtual bool IsAs4Supported() const
BgpContextSwap< BgpMpNlri > ContextSwap
PathSegmentLength SequenceLength
EncodeOffsets & encode_offsets()
mpl::list< BgpPathAttrLength, BgpPathAttributeForwardingEdgeList > Sequence
bool match(const BgpMpNlri *obj)
Accessor< BgpAttribute, uint8_t,&BgpAttribute::code > Setter
static bool Verifier(const void *obj, const uint8_t *data, size_t size, ParseContext *context)
BgpAttrAs4Aggregator ContextType
VectorAccessor< EdgeDiscoverySpec::Edge, uint8_t,&EdgeDiscoverySpec::Edge::address > Setter
mpl::list< BgpPathAttributeForwardingEdgeAddressLen, BgpPathAttributeForwardingEdgeInAddressValue > Sequence
const ParseErrorContext & error_context()
static bool Verifier(const EdgeForwardingSpec *obj, const uint8_t *data, size_t size, ParseContext *context)
std::vector< uint8_t > capability
mpl::list< BgpPathAttributeFlags, BgpPathAttribute > Sequence
static Capability * Encode(uint32_t llgr_time, uint8_t llgr_afi_flags, const std::vector< Address::Family > &llgr_families)
static void Callback(EncodeContext *context, uint8_t *data, int offset, int element_size)
CollectionAccessor< EdgeDiscoverySpec, vector< EdgeDiscoverySpec::Edge * >,&EdgeDiscoverySpec::edge_list > ContextStorer
EdgeDiscoverySpec ContextType
BgpContextSwap< BgpAttrAs4Aggregator > ContextSwap
static std::string ToString(uint16_t afi, uint8_t safi)
static bool Verifier(BgpAttrUnknown *obj, const uint8_t *data, size_t size, ParseContext *context)
BgpContextSwap< EdgeForwardingSpec > ContextSwap
BgpAttr4ByteAggregator ContextType
BgpContextSwap< As4PathSpec > ContextSwap
std::vector< uint64_t > origin_vns
static const uint8_t kMaxV6Bytes
OriginVnPathSpec ContextType
static bool Verifier(const As4PathSpec *obj, const uint8_t *data, size_t size, ParseContext *context)
mpl::list< BgpPathAttrLength, BgpPathAttrAs4PathSegmentList > Sequence
mpl::list< BgpUpdateWithdrawnRoutes, BgpPathAttributeList, BgpUpdateNlri > Sequence
CollectionAccessor< As4PathSpec, vector< As4PathSpec::PathSegment * >,&As4PathSpec::path_segments > ContextStorer
static int Encode(EncodeContext *context, const T *msg, uint8_t *data, size_t size)
mpl::list< BgpOpenCapability > Sequence
CollectionAccessor< BgpProto::Update, vector< BgpAttribute * >,&BgpProto::Update::path_attributes > ContextStorer
mpl::list< BgpAttributeValue< 1, AsPath4ByteSpec::PathSegment, int,&AsPath4ByteSpec::PathSegment::path_segment_type >, BgpPathAttrAsPath4ByteSegmentLength, BgpPathAttrAsPath4ByteSegmentValue > Sequence
std::vector< as_t > path_segment
BgpContextSwap< ClusterListSpec > ContextSwap
int operator()(As4PathSpec::PathSegment *obj, const uint8_t *data, size_t size)
boost::asio::ip::address_v4 Ip4Address
static std::pair< uint16_t, uint8_t > FamilyToAfiSafi(Address::Family family)
VectorAccessor< As4PathSpec::PathSegment, as_t,&As4PathSpec::PathSegment::path_segment > Setter
static void Writer(const void *msg, uint8_t *data, size_t size)
Accessor< BgpProtoPrefix, uint8_t,&BgpProtoPrefix::type > Setter
static void Callback(EncodeContext *context, uint8_t *data, int offset, int element_size)
ClusterListSpec ContextType
std::vector< uint8_t > identifier
mpl::list< NotificationErrorCode, NotificationErrorSubcode, NotificationData > Sequence
virtual const std::string ToString() const
Accessor< BgpProtoPrefix, uint8_t,&BgpProtoPrefix::type > Setter
static const int kMaxMessageSize
SetLength EncodingCallback
static const uint8_t FLAG_MASK
static std::string FamilyToString(Family fmly)
BgpContextSwap< OriginVnPathSpec > ContextSwap
uint32_t bgp_identifier() const
static void set(BgpAttribute *obj, uint8_t value)
bool match(const BgpProto::Update *ctx)
static bool Verifier(const BgpAttrNextHop *obj, const uint8_t *data, size_t size, ParseContext *context)
bool match(const BgpProto::OpenMessage::OptParam *ctx)
Accessor< BgpProto::OpenMessage::Capability, int,&BgpProto::OpenMessage::Capability::code > Setter
EdgeForwardingSpec ContextType
#define BGP_LOG_FLAG_TRACE
CollectionAccessor< BgpMpNlri, vector< BgpProtoPrefix * >,&BgpMpNlri::nlri > ContextStorer
int Validate(const BgpPeer *, std::string *data)
BgpProto::Update ContextType
static bool Decode(LLGR *llgr_params, const std::vector< Capability * > &capabilities)
mpl::list< BgpPrefixLen, BgpPrefixAddress > Sequence
BgpContextSwap< PmsiTunnelSpec > ContextSwap
static int Parse(const uint8_t *data, size_t size, ParseContext *context, T *obj)
mpl::list< BgpPathAttrLength, BgpPathAttributeExtendedCommunityList > Sequence
Accessor< BgpProtoPrefix, uint8_t,&BgpProtoPrefix::type > Setter
BgpContextSwap< AsPath4ByteSpec > ContextSwap
BgpContextSwap< BgpAttrAggregator > ContextSwap
CollectionAccessor< BgpProto::OpenMessage::OptParam, vector< BgpProto::OpenMessage::Capability * >,&BgpProto::OpenMessage::OptParam::capabilities > ContextStorer
BgpContextSwap< AsPathSpec > ContextSwap
BgpProto::Update ContextType
mpl::list< BgpPathAttrLength, BgpAttributeValue< 4, BgpAttrAs4Aggregator, as_t,&BgpAttrAs4Aggregator::as_num >, BgpAttributeValue< 4, BgpAttrAs4Aggregator, uint32_t,&BgpAttrAs4Aggregator::address > > Sequence
std::vector< Capability * > capabilities
int operator()(AsPath4ByteSpec::PathSegment *obj, const uint8_t *data, size_t size)
CommunitySpec ContextType
mpl::list< BgpPathAttributeFlags, BgpPathAttributeAs4 > Sequence
CollectionAccessor< BgpMpNlri, vector< BgpProtoPrefix * >,&BgpMpNlri::nlri > ContextStorer
Accessor< BgpAttribute, uint8_t,&BgpAttribute::code > Setter
BgpContextSwap< CommunitySpec > ContextSwap
SetLength EncodingCallback
mpl::list< BgpAttributeValue< 1, As4PathSpec::PathSegment, int,&As4PathSpec::PathSegment::path_segment_type >, BgpPathAttrAs4PathSegmentLength, BgpPathAttrAs4PathSegmentValue > Sequence
static bool Verifier(const BgpProto::OpenMessage *obj, const uint8_t *data, size_t size, ParseContext *context)
int ValidateCapabilities(BgpPeer *peer) const
ExtCommunitySpec ContextType
bool match(const BgpMpNlri *obj)
int operator()(EdgeForwardingSpec::Edge *obj, const uint8_t *data, size_t size)
bool enable_4byte_as() const
mpl::list< BgpMvpnNlriType, BgpMvpnNlriLen, BgpPrefixAddress > Sequence
static void set(BgpProtoPrefix *obj, int value)
static bool Verifier(const As4PathSpec::PathSegment *obj, const uint8_t *data, size_t size, ParseContext *context)
static bool Verifier(const AsPath4ByteSpec *obj, const uint8_t *data, size_t size, ParseContext *context)
Accessor< BgpProto::OpenMessage, uint32_t,&BgpProto::OpenMessage::as_num > Setter
static void Callback(EncodeContext *context, uint8_t *data, int offset, int element_size)
mpl::list< BgpUpdateWithdrawnRoutes, BgpPathAttributeAs4List, BgpUpdateNlri > Sequence
SetLength EncodingCallback
BgpAttrUnknown ContextType
mpl::map< mpl::pair< mpl::int_< BgpProto::OPEN >, BgpOpenMessage >, mpl::pair< mpl::int_< BgpProto::NOTIFICATION >, BgpNotificationMessage >, mpl::pair< mpl::int_< BgpProto::KEEPALIVE >, BgpKeepaliveMessage >, mpl::pair< mpl::int_< BgpProto::UPDATE >, BgpUpdateMessageAs4 > > Choice
VectorAccessor< BgpProtoPrefix, uint8_t,&BgpProtoPrefix::prefix > Setter
VectorAccessor< EdgeForwardingSpec::Edge, uint8_t,&EdgeForwardingSpec::Edge::outbound_address > Setter
static bool Verifier(const BgpAttrOrigin *obj, const uint8_t *data, size_t size, ParseContext *context)
static void Callback(EncodeContext *context, uint8_t *data, int offset, int element_size)
static bool Verifier(const BgpMpNlri *obj, const uint8_t *data, size_t size, ParseContext *context)
mpl::list< BgpPathAttributeMpNlriNextHopLength, BgpPathAttributeMpNlriNexthopAddr > Sequence
BgpContextSwap< EdgeDiscoverySpec > ContextSwap
BgpAttrAggregator ContextType
std::vector< as2_t > path_segment
std::vector< PathSegment * > path_segments
Accessor< BgpProto::Notification, int,&BgpProto::Notification::subcode > Setter
mpl::list< BgpPathAttrLength, BgpAttributeValue< 2, BgpMpNlri, uint16_t,&BgpMpNlri::afi >, BgpAttributeValue< 1, BgpMpNlri, uint8_t,&BgpMpNlri::safi >, BgpPathAttributeMpNlriNextHop, BgpPathAttributeReserved, BgpPathAttributeMpNlriChoice > Sequence
BgpContextSwap< BgpAttrUnknown > ContextSwap
mpl::list< BgpPathAttributeForwardingEdgeAddressLen, BgpPathAttributeForwardingEdgeOutAddressValue > Sequence
mpl::list< BgpPathAttrLength, BgpPathAttrUnknownValue > Sequence
std::vector< uint8_t > inbound_address
static const uint8_t kFlags
static void Callback(EncodeContext *context, uint8_t *data, int offset, int element_size)
mpl::list< BgpPathAttributeForwardingEdgeLen, BgpPathAttributeForwardingEdgeInAddress, BgpPathAttributeForwardingEdgeInLabel, BgpPathAttributeForwardingEdgeOutAddress, BgpPathAttributeForwardingEdgeOutLabel > Sequence
mpl::map< mpl::pair< mpl::int_< BgpProto::OPEN >, BgpOpenMessage >, mpl::pair< mpl::int_< BgpProto::NOTIFICATION >, BgpNotificationMessage >, mpl::pair< mpl::int_< BgpProto::KEEPALIVE >, BgpKeepaliveMessage >, mpl::pair< mpl::int_< BgpProto::UPDATE >, BgpUpdateMessage > > Choice
PathSegmentLength SequenceLength
VectorAccessor< EdgeDiscoverySpec::Edge, uint32_t,&EdgeDiscoverySpec::Edge::labels > Setter
static bool Verifier(const PmsiTunnelSpec *obj, const uint8_t *data, size_t size, ParseContext *context)
void set_flags(uint16_t gr_cap_bytes)
BgpProto::OpenMessage ContextType
CollectionAccessor< EdgeForwardingSpec, vector< EdgeForwardingSpec::Edge * >,&EdgeForwardingSpec::edge_list > ContextStorer
std::vector< BgpAttribute * > path_attributes
CollectionAccessor< BgpProto::Update, vector< BgpProtoPrefix * >,&BgpProto::Update::withdrawn_routes > ContextStorer
BgpProto::Notification ContextType
std::vector< uint32_t > labels
static const std::string toString(Code code, int subcode)
#define BGP_LOG_PEER(type, peer, level, flags, dir, arg)
static bool Verifier(const BgpAttrAtomicAggregate *obj, const uint8_t *data, size_t size, ParseContext *context)
static void set(BgpMpNlri *obj, int &value)
VectorAccessor< BgpAttrUnknown, uint8_t,&BgpAttrUnknown::value > Setter
mpl::list< BgpPathAttrLength, BgpPathAttributeDiscoveryEdgeList > Sequence
mpl::list< BgpPathAttributeDiscoveryEdgeAddressLen, BgpPathAttributeDiscoveryEdgeAddressValue > Sequence
static void put_value(uint8_t *data, int size, uint64_t value)