attr->encap_subtlvs = NULL;
}
#ifdef ENABLE_BGP_VNC
- if (attr->vnc_subtlvs) {
- encap_free(attr->vnc_subtlvs);
- attr->vnc_subtlvs = NULL;
+ struct bgp_attr_encap_subtlv *vnc_subtlvs =
+ bgp_attr_get_vnc_subtlvs(attr);
+
+ if (vnc_subtlvs) {
+ encap_free(vnc_subtlvs);
+ bgp_attr_set_vnc_subtlvs(attr, NULL);
}
#endif
}
if (attr->encap_subtlvs)
MIX(encap_hash_key_make(attr->encap_subtlvs));
#ifdef ENABLE_BGP_VNC
- if (attr->vnc_subtlvs)
- MIX(encap_hash_key_make(attr->vnc_subtlvs));
+ struct bgp_attr_encap_subtlv *vnc_subtlvs =
+ bgp_attr_get_vnc_subtlvs(attr);
+ if (vnc_subtlvs)
+ MIX(encap_hash_key_make(vnc_subtlvs));
#endif
MIX(attr->mp_nexthop_len);
key = jhash(attr->mp_nexthop_global.s6_addr, IPV6_MAX_BYTELEN, key);
&& (attr1->encap_tunneltype == attr2->encap_tunneltype)
&& encap_same(attr1->encap_subtlvs, attr2->encap_subtlvs)
#ifdef ENABLE_BGP_VNC
- && encap_same(attr1->vnc_subtlvs, attr2->vnc_subtlvs)
+ && encap_same(bgp_attr_get_vnc_subtlvs(attr1),
+ bgp_attr_get_vnc_subtlvs(attr2))
#endif
&& IPV6_ADDR_SAME(&attr1->mp_nexthop_global,
&attr2->mp_nexthop_global)
val->encap_subtlvs = NULL;
}
#ifdef ENABLE_BGP_VNC
- if (val->vnc_subtlvs) {
- val->vnc_subtlvs = NULL;
- }
+ struct bgp_attr_encap_subtlv *vnc_subtlvs =
+ bgp_attr_get_vnc_subtlvs(val);
+
+ if (vnc_subtlvs)
+ bgp_attr_set_vnc_subtlvs(val, NULL);
#endif
if (val->srv6_l3vpn)
val->srv6_l3vpn = NULL;
attr->srv6_vpn->refcnt++;
}
#ifdef ENABLE_BGP_VNC
- if (attr->vnc_subtlvs) {
- if (!attr->vnc_subtlvs->refcnt)
- attr->vnc_subtlvs = encap_intern(attr->vnc_subtlvs,
- VNC_SUBTLV_TYPE);
+ struct bgp_attr_encap_subtlv *vnc_subtlvs =
+ bgp_attr_get_vnc_subtlvs(attr);
+
+ if (vnc_subtlvs) {
+ if (!vnc_subtlvs->refcnt)
+ bgp_attr_set_vnc_subtlvs(
+ attr,
+ encap_intern(vnc_subtlvs, VNC_SUBTLV_TYPE));
else
- attr->vnc_subtlvs->refcnt++;
+ vnc_subtlvs->refcnt++;
}
#endif
encap_unintern(&attr->encap_subtlvs, ENCAP_SUBTLV_TYPE);
#ifdef ENABLE_BGP_VNC
- if (attr->vnc_subtlvs)
- encap_unintern(&attr->vnc_subtlvs, VNC_SUBTLV_TYPE);
+ struct bgp_attr_encap_subtlv *vnc_subtlvs =
+ bgp_attr_get_vnc_subtlvs(attr);
+
+ if (vnc_subtlvs) {
+ encap_unintern(&vnc_subtlvs, VNC_SUBTLV_TYPE);
+ bgp_attr_set_vnc_subtlvs(attr, vnc_subtlvs);
+ }
#endif
if (attr->srv6_l3vpn)
attr->encap_subtlvs = NULL;
}
#ifdef ENABLE_BGP_VNC
- if (attr->vnc_subtlvs && !attr->vnc_subtlvs->refcnt) {
- encap_free(attr->vnc_subtlvs);
- attr->vnc_subtlvs = NULL;
+ struct bgp_attr_encap_subtlv *vnc_subtlvs =
+ bgp_attr_get_vnc_subtlvs(attr);
+
+ if (vnc_subtlvs && !vnc_subtlvs->refcnt) {
+ encap_free(vnc_subtlvs);
+ bgp_attr_set_vnc_subtlvs(attr, NULL);
}
#endif
}
#ifdef ENABLE_BGP_VNC
} else {
struct bgp_attr_encap_subtlv *stlv_last;
- for (stlv_last = attr->vnc_subtlvs;
+ struct bgp_attr_encap_subtlv *vnc_subtlvs =
+ bgp_attr_get_vnc_subtlvs(attr);
+
+ for (stlv_last = vnc_subtlvs;
stlv_last && stlv_last->next;
stlv_last = stlv_last->next)
;
- if (stlv_last) {
+ if (stlv_last)
stlv_last->next = tlv;
- } else {
- attr->vnc_subtlvs = tlv;
- }
+ else
+ bgp_attr_set_vnc_subtlvs(attr, tlv);
#endif
}
}
attr->encap_subtlvs = encap_intern(attr->encap_subtlvs,
ENCAP_SUBTLV_TYPE);
#ifdef ENABLE_BGP_VNC
- if (attr->vnc_subtlvs)
- attr->vnc_subtlvs = encap_intern(attr->vnc_subtlvs,
- VNC_SUBTLV_TYPE);
+ struct bgp_attr_encap_subtlv *vnc_subtlvs =
+ bgp_attr_get_vnc_subtlvs(attr);
+
+ if (vnc_subtlvs)
+ bgp_attr_set_vnc_subtlvs(
+ attr,
+ encap_intern(vnc_subtlvs, VNC_SUBTLV_TYPE));
#endif
} else {
if (transit) {
if (attr->encap_subtlvs)
assert(attr->encap_subtlvs->refcnt > 0);
#ifdef ENABLE_BGP_VNC
- if (attr->vnc_subtlvs)
- assert(attr->vnc_subtlvs->refcnt > 0);
+ struct bgp_attr_encap_subtlv *vnc_subtlvs =
+ bgp_attr_get_vnc_subtlvs(attr);
+
+ if (vnc_subtlvs)
+ assert(vnc_subtlvs->refcnt > 0);
#endif
return ret;
#ifdef ENABLE_BGP_VNC_ATTR
case BGP_ATTR_VNC:
attrname = "VNC";
- subtlvs = attr->vnc_subtlvs;
+ subtlvs = bgp_attr_get_vnc_subtlvs(attr);
if (subtlvs == NULL) /* nothing to do */
return;
attrlenfield = 0; /* no outer T + L */
encaptlv->length = 4;
lt = htonl(*lifetime);
memcpy(encaptlv->value, <, 4);
- attr.vnc_subtlvs = encaptlv;
+ bgp_attr_set_vnc_subtlvs(&attr, encaptlv);
vnc_zlog_debug_verbose(
"%s: set Encap Attr Prefix Lifetime to %d", __func__,
*lifetime);
if (rfp_options) {
if (flags & RFAPI_AHR_RFPOPT_IS_VNCTLV) {
-
+ struct bgp_attr_encap_subtlv *vnc_subtlvs =
+ bgp_attr_get_vnc_subtlvs(&attr);
/*
* this flag means we're passing a pointer to an
* existing encap tlv chain which we should copy.
*/
encaptlv = encap_tlv_dup(
(struct bgp_attr_encap_subtlv *)rfp_options);
- if (attr.vnc_subtlvs) {
- attr.vnc_subtlvs->next = encaptlv;
- } else {
- attr.vnc_subtlvs = encaptlv;
- }
-
+ if (vnc_subtlvs)
+ vnc_subtlvs->next = encaptlv;
+ else
+ bgp_attr_set_vnc_subtlvs(&attr, encaptlv);
} else {
struct bgp_tea_options *hop;
/* XXX max of one tlv present so far from above code */
- struct bgp_attr_encap_subtlv *tail = attr.vnc_subtlvs;
+ struct bgp_attr_encap_subtlv *tail =
+ bgp_attr_get_vnc_subtlvs(&attr);
for (hop = rfp_options; hop; hop = hop->next) {
/*
* add to end of subtlv chain
*/
- if (tail) {
+ if (tail)
tail->next = encaptlv;
- } else {
- attr.vnc_subtlvs = encaptlv;
- }
+ else
+ bgp_attr_set_vnc_subtlvs(&attr,
+ encaptlv);
tail = encaptlv;
}
}