mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
sctp: don't consider the interface name when removing an address
Checking the interface name can not be done consistently, so don't do it. (cherry picked from commit bf11fdaf0d095fecca61fa8b457d06e27fae5946) (cherry picked from commit 66628552a38751ed5c395858d1754660557674cd) Approved by: re (cperviva)
This commit is contained in:
parent
33197f22b5
commit
bb6af83fe4
3 changed files with 5 additions and 27 deletions
|
|
@ -338,8 +338,7 @@ sctp_addr_change(struct ifaddr *ifa, int cmd)
|
|||
(void *)ifa, ifa->ifa_addr, ifa_flags, 1);
|
||||
} else {
|
||||
sctp_del_addr_from_vrf(SCTP_DEFAULT_VRFID, ifa->ifa_addr,
|
||||
ifa->ifa_ifp->if_index,
|
||||
ifa->ifa_ifp->if_xname);
|
||||
ifa->ifa_ifp->if_index);
|
||||
|
||||
/*
|
||||
* We don't bump refcount here so when it completes the
|
||||
|
|
|
|||
|
|
@ -662,8 +662,7 @@ sctp_add_addr_to_vrf(uint32_t vrf_id, void *ifn, uint32_t ifn_index,
|
|||
*/
|
||||
SCTPDBG(SCTP_DEBUG_PCB4, "Lost an address change?\n");
|
||||
/* Opps, must decrement the count */
|
||||
sctp_del_addr_from_vrf(vrf_id, addr, ifn_index,
|
||||
if_name);
|
||||
sctp_del_addr_from_vrf(vrf_id, addr, ifn_index);
|
||||
return (NULL);
|
||||
}
|
||||
SCTP_INCR_LADDR_COUNT();
|
||||
|
|
@ -688,7 +687,7 @@ sctp_add_addr_to_vrf(uint32_t vrf_id, void *ifn, uint32_t ifn_index,
|
|||
|
||||
void
|
||||
sctp_del_addr_from_vrf(uint32_t vrf_id, struct sockaddr *addr,
|
||||
uint32_t ifn_index, const char *if_name)
|
||||
uint32_t ifn_index)
|
||||
{
|
||||
struct sctp_vrf *vrf;
|
||||
struct sctp_ifa *sctp_ifap;
|
||||
|
|
@ -709,27 +708,7 @@ sctp_del_addr_from_vrf(uint32_t vrf_id, struct sockaddr *addr,
|
|||
if (sctp_ifap != NULL) {
|
||||
/* Validate the delete */
|
||||
if (sctp_ifap->ifn_p) {
|
||||
bool valid = false;
|
||||
|
||||
/*-
|
||||
* The name has priority over the ifn_index
|
||||
* if its given.
|
||||
*/
|
||||
if (if_name) {
|
||||
if (strncmp(if_name, sctp_ifap->ifn_p->ifn_name, SCTP_IFNAMSIZ) == 0) {
|
||||
/* They match its a correct delete */
|
||||
valid = true;
|
||||
}
|
||||
}
|
||||
if (!valid) {
|
||||
/* last ditch check ifn_index */
|
||||
if (ifn_index == sctp_ifap->ifn_p->ifn_index) {
|
||||
valid = true;
|
||||
}
|
||||
}
|
||||
if (!valid) {
|
||||
SCTPDBG(SCTP_DEBUG_PCB4, "ifn:%d ifname:%s does not match addresses\n",
|
||||
ifn_index, ((if_name == NULL) ? "NULL" : if_name));
|
||||
if (ifn_index != sctp_ifap->ifn_p->ifn_index) {
|
||||
SCTPDBG(SCTP_DEBUG_PCB4, "ifn:%d ifname:%s - ignoring delete\n",
|
||||
sctp_ifap->ifn_p->ifn_index, sctp_ifap->ifn_p->ifn_name);
|
||||
SCTP_IPI_ADDR_WUNLOCK();
|
||||
|
|
|
|||
|
|
@ -510,7 +510,7 @@ void sctp_free_ifa(struct sctp_ifa *sctp_ifap);
|
|||
|
||||
void
|
||||
sctp_del_addr_from_vrf(uint32_t vrfid, struct sockaddr *addr,
|
||||
uint32_t ifn_index, const char *if_name);
|
||||
uint32_t ifn_index);
|
||||
|
||||
struct sctp_nets *sctp_findnet(struct sctp_tcb *, struct sockaddr *);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue