Provide the error code in SCTP_PEER_ADDR_CHANGE notifications as
specified in RFC 6458. MFC after: 3 days
This commit is contained in:
parent
b342faf4bf
commit
4b1f78e1af
@ -4024,7 +4024,7 @@ sctp_express_handle_sack(struct sctp_tcb *stcb, uint32_t cumack,
|
||||
/* addr came good */
|
||||
net->dest_state |= SCTP_ADDR_REACHABLE;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb,
|
||||
SCTP_RECEIVED_SACK, (void *)net, SCTP_SO_NOT_LOCKED);
|
||||
0, (void *)net, SCTP_SO_NOT_LOCKED);
|
||||
}
|
||||
if (net == stcb->asoc.primary_destination) {
|
||||
if (stcb->asoc.alternate) {
|
||||
@ -4831,7 +4831,7 @@ sctp_handle_sack(struct mbuf *m, int offset_seg, int offset_dup,
|
||||
/* addr came good */
|
||||
net->dest_state |= SCTP_ADDR_REACHABLE;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb,
|
||||
SCTP_RECEIVED_SACK, (void *)net, SCTP_SO_NOT_LOCKED);
|
||||
0, (void *)net, SCTP_SO_NOT_LOCKED);
|
||||
}
|
||||
if (net == stcb->asoc.primary_destination) {
|
||||
if (stcb->asoc.alternate) {
|
||||
|
@ -632,7 +632,7 @@ sctp_handle_heartbeat_ack(struct sctp_heartbeat_chunk *cp,
|
||||
if (!(r_net->dest_state & SCTP_ADDR_REACHABLE)) {
|
||||
r_net->dest_state |= SCTP_ADDR_REACHABLE;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb,
|
||||
SCTP_HEARTBEAT_SUCCESS, (void *)r_net, SCTP_SO_NOT_LOCKED);
|
||||
0, (void *)r_net, SCTP_SO_NOT_LOCKED);
|
||||
}
|
||||
if (r_net->dest_state & SCTP_ADDR_PF) {
|
||||
r_net->dest_state &= ~SCTP_ADDR_PF;
|
||||
|
@ -3815,8 +3815,7 @@ sctp_handle_no_route(struct sctp_tcb *stcb,
|
||||
if ((net->dest_state & SCTP_ADDR_REACHABLE) && stcb) {
|
||||
SCTPDBG(SCTP_DEBUG_OUTPUT1, "no route takes interface %p down\n", net);
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_DOWN,
|
||||
stcb,
|
||||
SCTP_FAILED_THRESHOLD,
|
||||
stcb, 0,
|
||||
(void *)net,
|
||||
so_locked);
|
||||
net->dest_state &= ~SCTP_ADDR_REACHABLE;
|
||||
|
@ -101,8 +101,7 @@ sctp_threshold_management(struct sctp_inpcb *inp, struct sctp_tcb *stcb,
|
||||
net->dest_state &= ~SCTP_ADDR_REQ_PRIMARY;
|
||||
net->dest_state &= ~SCTP_ADDR_PF;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_DOWN,
|
||||
stcb,
|
||||
SCTP_FAILED_THRESHOLD,
|
||||
stcb, 0,
|
||||
(void *)net, SCTP_SO_NOT_LOCKED);
|
||||
}
|
||||
} else if ((net->pf_threshold < net->failure_threshold) &&
|
||||
|
@ -270,7 +270,7 @@ sctp_notify(struct sctp_inpcb *inp,
|
||||
net->dest_state &= ~SCTP_ADDR_REACHABLE;
|
||||
net->dest_state &= ~SCTP_ADDR_PF;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_DOWN,
|
||||
stcb, SCTP_FAILED_THRESHOLD,
|
||||
stcb, 0,
|
||||
(void *)net, SCTP_SO_NOT_LOCKED);
|
||||
}
|
||||
SCTP_TCB_UNLOCK(stcb);
|
||||
@ -4826,12 +4826,12 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
|
||||
if (net->dest_state & SCTP_ADDR_REACHABLE) {
|
||||
if (net->error_count > paddrp->spp_pathmaxrxt) {
|
||||
net->dest_state &= ~SCTP_ADDR_REACHABLE;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_DOWN, stcb, SCTP_RESPONSE_TO_USER_REQ, net, SCTP_SO_LOCKED);
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_DOWN, stcb, 0, net, SCTP_SO_LOCKED);
|
||||
}
|
||||
} else {
|
||||
if (net->error_count <= paddrp->spp_pathmaxrxt) {
|
||||
net->dest_state |= SCTP_ADDR_REACHABLE;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb, SCTP_RESPONSE_TO_USER_REQ, net, SCTP_SO_LOCKED);
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb, 0, net, SCTP_SO_LOCKED);
|
||||
}
|
||||
}
|
||||
net->failure_threshold = paddrp->spp_pathmaxrxt;
|
||||
@ -4869,12 +4869,12 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
|
||||
if (net->dest_state & SCTP_ADDR_REACHABLE) {
|
||||
if (net->error_count > paddrp->spp_pathmaxrxt) {
|
||||
net->dest_state &= ~SCTP_ADDR_REACHABLE;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_DOWN, stcb, SCTP_RESPONSE_TO_USER_REQ, net, SCTP_SO_LOCKED);
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_DOWN, stcb, 0, net, SCTP_SO_LOCKED);
|
||||
}
|
||||
} else {
|
||||
if (net->error_count <= paddrp->spp_pathmaxrxt) {
|
||||
net->dest_state |= SCTP_ADDR_REACHABLE;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb, SCTP_RESPONSE_TO_USER_REQ, net, SCTP_SO_LOCKED);
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb, 0, net, SCTP_SO_LOCKED);
|
||||
}
|
||||
}
|
||||
net->failure_threshold = paddrp->spp_pathmaxrxt;
|
||||
@ -5680,12 +5680,12 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
|
||||
if (net->dest_state & SCTP_ADDR_REACHABLE) {
|
||||
if (net->failure_threshold > thlds->spt_pathmaxrxt) {
|
||||
net->dest_state &= ~SCTP_ADDR_REACHABLE;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_DOWN, stcb, SCTP_RESPONSE_TO_USER_REQ, net, SCTP_SO_LOCKED);
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_DOWN, stcb, 0, net, SCTP_SO_LOCKED);
|
||||
}
|
||||
} else {
|
||||
if (net->failure_threshold <= thlds->spt_pathmaxrxt) {
|
||||
net->dest_state |= SCTP_ADDR_REACHABLE;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb, SCTP_RESPONSE_TO_USER_REQ, net, SCTP_SO_LOCKED);
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb, 0, net, SCTP_SO_LOCKED);
|
||||
}
|
||||
}
|
||||
net->failure_threshold = thlds->spt_pathmaxrxt;
|
||||
@ -5709,12 +5709,12 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
|
||||
if (net->dest_state & SCTP_ADDR_REACHABLE) {
|
||||
if (net->failure_threshold > thlds->spt_pathmaxrxt) {
|
||||
net->dest_state &= ~SCTP_ADDR_REACHABLE;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_DOWN, stcb, SCTP_RESPONSE_TO_USER_REQ, net, SCTP_SO_LOCKED);
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_DOWN, stcb, 0, net, SCTP_SO_LOCKED);
|
||||
}
|
||||
} else {
|
||||
if (net->failure_threshold <= thlds->spt_pathmaxrxt) {
|
||||
net->dest_state |= SCTP_ADDR_REACHABLE;
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb, SCTP_RESPONSE_TO_USER_REQ, net, SCTP_SO_LOCKED);
|
||||
sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_UP, stcb, 0, net, SCTP_SO_LOCKED);
|
||||
}
|
||||
}
|
||||
net->failure_threshold = thlds->spt_pathmaxrxt;
|
||||
|
Loading…
x
Reference in New Issue
Block a user