mirror of
https://github.com/opnsense/src.git
synced 2026-06-14 19:20:18 -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. MFC after: 3 days
This commit is contained in:
parent
d839cf2fbb
commit
bf11fdaf0d
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