ncurses-libs ncurses-terminfo ncurses-terminfo-base patch pax-utils pcre
perl pkgconf python3 python3-dev readline readline-dev sqlite-libs
squashfs-tools sudo tar texinfo xorriso xz-libs py-pip rtrlib rtrlib-dev
- py3-sphinx elfutils elfutils-dev"
+ py3-sphinx elfutils elfutils-dev libyang-dev"
checkdepends="pytest py-setuptools"
install="$pkgname.pre-install $pkgname.pre-deinstall $pkgname.post-deinstall"
subpackages="$pkgname-dev $pkgname-doc $pkgname-dbg"
else if (b->afi == AFI_L2VPN && b->safi == SAFI_EVPN)
return -1;
+ if (a->afi == b->afi && a->safi == SAFI_MPLS_VPN &&
+ b->safi == SAFI_MPLS_VPN) {
+ ret = prefix_cmp(&a->rd, &b->rd);
+ if (ret)
+ return ret;
+ } else if (a->safi == SAFI_MPLS_VPN)
+ return 1;
+ else if (b->safi == SAFI_MPLS_VPN)
+ return -1;
+
ret = prefix_cmp(&a->p, &b->p);
if (ret)
return ret;
offsetof(struct bmp_queue_entry, refcount)
- offsetof(struct bmp_queue_entry, peerid),
key);
- if (e->afi == AFI_L2VPN && e->safi == SAFI_EVPN)
+ if ((e->afi == AFI_L2VPN && e->safi == SAFI_EVPN) ||
+ (e->safi == SAFI_MPLS_VPN))
key = jhash(&e->rd,
offsetof(struct bmp_queue_entry, rd)
- offsetof(struct bmp_queue_entry, refcount)
struct bgp_path_info *bpi = NULL, *bpiter;
struct bgp_adj_in *adjin = NULL, *adjiter;
- if (afi == AFI_L2VPN && safi == SAFI_EVPN) {
+ if ((afi == AFI_L2VPN && safi == SAFI_EVPN) ||
+ (safi == SAFI_MPLS_VPN)) {
/* initialize syncrdpos to the first
* mid-layer table entry
*/
if (!bn) {
bn = bgp_table_get_next(table, &bmp->syncpos);
if (!bn) {
- if (afi == AFI_L2VPN && safi == SAFI_EVPN) {
+ if ((afi == AFI_L2VPN && safi == SAFI_EVPN) ||
+ (safi == SAFI_MPLS_VPN)) {
/* reset bottom-layer pointer */
memset(&bmp->syncpos, 0,
sizeof(bmp->syncpos));
const struct prefix *bn_p = bgp_dest_get_prefix(bn);
struct prefix_rd *prd = NULL;
- if (afi == AFI_L2VPN && safi == SAFI_EVPN)
+ if (((afi == AFI_L2VPN) && (safi == SAFI_EVPN)) ||
+ (safi == SAFI_MPLS_VPN))
prd = (struct prefix_rd *)bgp_dest_get_prefix(bmp->syncrdpos);
if (bpi)
bn = bgp_node_lookup(bmp->targets->bgp->rib[afi][safi], &bqe->p);
struct prefix_rd *prd = NULL;
- if (bqe->afi == AFI_L2VPN && bqe->safi == SAFI_EVPN)
+ if ((bqe->afi == AFI_L2VPN && bqe->safi == SAFI_EVPN) ||
+ (bqe->safi == SAFI_MPLS_VPN))
prd = &bqe->rd;
if (bmp->targets->afimon[afi][safi] & BMP_MON_POSTPOLICY) {
bqeref.afi = afi;
bqeref.safi = safi;
- if (afi == AFI_L2VPN && safi == SAFI_EVPN && bn->pdest)
+ if ((afi == AFI_L2VPN && safi == SAFI_EVPN && bn->pdest) ||
+ (safi == SAFI_MPLS_VPN))
prefix_copy(&bqeref.rd,
(struct prefix_rd *)bgp_dest_get_prefix(bn->pdest));
DEFPY(bmp_monitor_cfg,
bmp_monitor_cmd,
- "[no] bmp monitor <ipv4|ipv6|l2vpn> <unicast|multicast|evpn> <pre-policy|post-policy>$policy",
+ "[no] bmp monitor <ipv4|ipv6|l2vpn> <unicast|multicast|evpn|vpn> <pre-policy|post-policy>$policy",
NO_STR
BMP_STR
"Send BMP route monitoring messages\n"
"Address Family\nAddress Family\nAddress Family\n"
- "Address Family\nAddress Family\nAddress Family\n"
+ "Address Family\nAddress Family\nAddress Family\nAddress Family\n"
"Send state before policy and filter processing\n"
"Send state with policy and filters applied\n")
{
.. clicmd:: bmp monitor AFI SAFI <pre-policy|post-policy>
Perform Route Monitoring for the specified AFI and SAFI. Only IPv4 and
- IPv6 are currently valid for AFI, and only unicast and multicast are valid
- for SAFI. Other AFI/SAFI combinations may be added in the future.
+ IPv6 are currently valid for AFI. SAFI valid values are currently
+ unicast, multicast, evpn and vpn.
+ Other AFI/SAFI combinations may be added in the future.
All BGP neighbors are included in Route Monitoring. Options to select
a subset of BGP sessions may be added in the future.
# This stage builds a libyang APK from source
FROM alpine-builder as libyang-builder
RUN mkdir -p /libyang && chown -R builder /pkgs /libyang
-COPY docker/alpine/libyang/ /libyang
-USER builder
-RUN cd /libyang \
- && abuild checksum \
- && abuild -r -P /pkgs/apk
+# -- Not currently needed - libyang currently available in Alpine upstream
+# COPY docker/alpine/libyang/ /libyang
+# USER builder
+# RUN cd /libyang \
+# && abuild checksum \
+# && abuild -r -P /pkgs/apk
# This stage builds a dist tarball from the source
FROM alpine:3.15 as source-builder
&& pip install pytest
RUN mkdir -p /pkgs/apk
-COPY --from=libyang-builder /pkgs/apk/ /pkgs/apk/
-RUN apk add \
- --no-cache \
- --allow-untrusted /pkgs/apk/*/*.apk
+# -- Not needed while libyang is not built
+# COPY --from=libyang-builder /pkgs/apk/ /pkgs/apk/
+# RUN apk add \
+# --no-cache \
+# --allow-untrusted /pkgs/apk/*/*.apk \
COPY . /src
ARG PKGVER
# This stage builds an APK from the dist tarball
FROM alpine-builder as frr-apk-builder
-COPY --from=libyang-builder /pkgs/apk/ /pkgs/apk/
+# -- Not needed while libyang is not built
+# COPY --from=libyang-builder /pkgs/apk/ /pkgs/apk/
+# RUN apk add \
+# --no-cache \
+# --allow-untrusted /pkgs/apk/*/*.apk
COPY --from=source-builder /src/frr-*.tar.gz /src/alpine/* /dist/
RUN find /pkgs/apk -type f -name APKINDEX.tar.gz -delete
-RUN apk add \
- --no-cache \
- --allow-untrusted /pkgs/apk/*/*.apk
RUN chown -R builder /dist /pkgs
USER builder
RUN cd /dist \
# Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net>
# Maintainer: Christian Franke <nobody@nowhere.ws>
pkgname=libyang
-pkgver=2.0.7
+pkgver=2.0.194
pkgrel=0
pkgdesc="YANG data modelling language parser and toolkit"
url="https://github.com/CESNET/libyang"
makedepends="bison cmake cmocka-dev flex pcre2-dev"
checkdepends="expect grep shunit2"
subpackages="$pkgname-dev $pkgname-doc"
-source="$pkgname-$pkgver.tar.gz::https://github.com/CESNET/libyang/archive/v$pkgver.tar.gz
- 10-remove-non-standard-headers.patch
- 11-utest-dont-parse-dlerror.patch"
+source="$pkgname-$pkgver.tar.gz::https://github.com/CESNET/libyang/archive/v$pkgver.tar.gz"
# secfixes:
# 1.0.215-r1:
package() {
make -C build DESTDIR="$pkgdir" install
}
-
-sha512sums="edb1d8d372b25ed820fa312e0dc96d4af7c8cd5ddeb785964de73f64774062ea7a5586bb27e2039ad24189d4a2ba04268921ca86e82423fc48647d1d10a2a0a7 libyang-2.0.7.tar.gz
-385008c715e6b0dc9e8f33c9cb550b3af7ee16f056f35d09a4ba01b9e00ddb88940915f93fc608fedd30b4f9a6a1503df414ae0be64b1263681b0ee18e6f4db8 10-remove-non-standard-headers.patch
-b16881d301a6aec68fbe6bfb7ba53a8fcdb4b9eead3b03573e0e2a4a8c3c3d6962db623be14d29c023b5a7ad0f685da1f6033dd9985f7a2914ad2f4da07e60cb 11-utest-dont-parse-dlerror.patch"
}
actl.holdtime = adj->holdtime;
actl.holdtime_remaining =
- thread_timer_remain_second(adj->inactivity_timer);
+ thread_is_scheduled(adj->inactivity_timer)
+ ? thread_timer_remain_second(adj->inactivity_timer)
+ : 0;
actl.trans_addr = adj->trans_addr;
actl.ds_tlv = adj->ds_tlv;
static int _plist_is_dup(const struct lyd_node *dnode, void *arg)
{
struct plist_dup_args *pda = arg;
- struct prefix p;
+ struct prefix p = {};
int ge, le;
bool any;
void pim_zebra_init(void);
void pim_zebra_zclient_update(struct vty *vty);
-void pim_scan_individual_oil(struct channel_oil *c_oil, int in_vif_index);
void pim_scan_oil(struct pim_instance *pim_matcher);
void pim_forward_start(struct pim_ifchannel *ch);
nhe->nhg.nexthop);
}
+ THREAD_OFF(nhe->timer);
+
if (nhe->refcnt)
zlog_debug("nhe_id=%pNG hash refcnt=%d", nhe, nhe->refcnt);
vty_out(vty, "%s\n", out);
XFREE(MTYPE_TMP, out);
+ ttable_del(table);
vty_out(vty,
" Route Route Neighbor LSP LSP\n");
vty_out(vty,