diff options
Diffstat (limited to 'net/sctp/bind_addr.c')
| -rw-r--r-- | net/sctp/bind_addr.c | 26 | 
1 files changed, 26 insertions, 0 deletions
diff --git a/net/sctp/bind_addr.c b/net/sctp/bind_addr.c index 43266117478..13fbfb449a5 100644 --- a/net/sctp/bind_addr.c +++ b/net/sctp/bind_addr.c @@ -353,6 +353,32 @@ int sctp_bind_addr_match(struct sctp_bind_addr *bp,  	return match;  } +/* Get the state of the entry in the bind_addr_list */ +int sctp_bind_addr_state(const struct sctp_bind_addr *bp, +			 const union sctp_addr *addr) +{ +	struct sctp_sockaddr_entry *laddr; +	struct sctp_af *af; +	int state = -1; + +	af = sctp_get_af_specific(addr->sa.sa_family); +	if (unlikely(!af)) +		return state; + +	rcu_read_lock(); +	list_for_each_entry_rcu(laddr, &bp->address_list, list) { +		if (!laddr->valid) +			continue; +		if (af->cmp_addr(&laddr->a, addr)) { +			state = laddr->state; +			break; +		} +	} +	rcu_read_unlock(); + +	return state; +} +  /* Find the first address in the bind address list that is not present in   * the addrs packed array.   */  |