From c1835c966dbb707a059f625ba7db55b9f754c9ab Mon Sep 17 00:00:00 2001 From: rrs Date: Fri, 15 Jun 2007 03:16:48 +0000 Subject: [PATCH] - Add VRF id to sctp_ifa structure, needed mainly in panda but useful during deletes of ifa's in diff VRF's when applicable. --- sys/netinet/sctp_asconf.c | 5 +++++ sys/netinet/sctp_pcb.c | 2 +- sys/netinet/sctp_pcb.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/sys/netinet/sctp_asconf.c b/sys/netinet/sctp_asconf.c index 1b542579e40..df8c290ebd7 100644 --- a/sys/netinet/sctp_asconf.c +++ b/sys/netinet/sctp_asconf.c @@ -1704,6 +1704,11 @@ sctp_iterator_stcb(struct sctp_inpcb *inp, struct sctp_tcb *stcb, void *ptr, LIST_FOREACH(l, &asc->list_of_work, sctp_nxt_addr) { ifa = l->ifa; type = l->action; + + /* address's vrf_id must be the vrf_id of the assoc */ + if (ifa->vrf_id != stcb->asoc.vrf_id) { + continue; + } /* Same checks again for assoc */ if (ifa->address.sa.sa_family == AF_INET6) { /* invalid if we're not a v6 endpoint */ diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index 0160aeada83..4d23f24f0be 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -414,7 +414,7 @@ sctp_add_addr_to_vrf(uint32_t vrf_id, void *ifn, uint32_t ifn_index, memset(sctp_ifap, 0, sizeof(struct sctp_ifa)); sctp_ifap->ifn_p = sctp_ifnp; atomic_add_int(&sctp_ifnp->refcount, 1); - + sctp_ifap->vrf_id = vrf_id; sctp_ifap->ifa = ifa; memcpy(&sctp_ifap->address, addr, addr->sa_len); sctp_ifap->localifa_flags = SCTP_ADDR_VALID | SCTP_ADDR_DEFER_USE; diff --git a/sys/netinet/sctp_pcb.h b/sys/netinet/sctp_pcb.h index 638def074e7..2921459b713 100644 --- a/sys/netinet/sctp_pcb.h +++ b/sys/netinet/sctp_pcb.h @@ -109,6 +109,7 @@ struct sctp_ifa { uint32_t refcount; /* number of folks refering to this */ uint32_t flags; uint32_t localifa_flags; + uint32_t vrf_id; /* vrf_id of this addr (for deleting) */ uint8_t src_is_loop; uint8_t src_is_priv; uint8_t src_is_glob; -- 2.45.0