diff options
author | rwatson <rwatson@FreeBSD.org> | 2005-10-30 19:44:40 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2005-10-30 19:44:40 +0000 |
commit | 49831ed8da06ffadf684484671b4561c9ac55f9f (patch) | |
tree | 779e3d7a8028f1ac29696c62ad8b70ba7bc70d2e /sys/netatm | |
parent | 1d93f083bf03400439b86271732e2b3f17ba284c (diff) | |
download | FreeBSD-src-49831ed8da06ffadf684484671b4561c9ac55f9f.zip FreeBSD-src-49831ed8da06ffadf684484671b4561c9ac55f9f.tar.gz |
Push the assignment of a new or updated so_qlimit from solisten()
following the protocol pru_listen() call to solisten_proto(), so
that it occurs under the socket lock acquisition that also sets
SO_ACCEPTCONN. This requires passing the new backlog parameter
to the protocol, which also allows the protocol to be aware of
changes in queue limit should it wish to do something about the
new queue limit. This continues a move towards the socket layer
acting as a library for the protocol.
Bump __FreeBSD_version due to a change in the in-kernel protocol
interface. This change has been tested with IPv4 and UNIX domain
sockets, but not other protocols.
Diffstat (limited to 'sys/netatm')
-rw-r--r-- | sys/netatm/atm_aal5.c | 8 | ||||
-rw-r--r-- | sys/netatm/atm_cm.c | 5 | ||||
-rw-r--r-- | sys/netatm/atm_socket.c | 6 | ||||
-rw-r--r-- | sys/netatm/atm_var.h | 4 | ||||
-rw-r--r-- | sys/netatm/ipatm/ipatm_load.c | 2 |
5 files changed, 15 insertions, 10 deletions
diff --git a/sys/netatm/atm_aal5.c b/sys/netatm/atm_aal5.c index 6d625e0..2367eb9 100644 --- a/sys/netatm/atm_aal5.c +++ b/sys/netatm/atm_aal5.c @@ -69,7 +69,8 @@ static int atm_aal5_attach(struct socket *, int, struct thread *td); static int atm_aal5_detach(struct socket *); static int atm_aal5_bind(struct socket *, struct sockaddr *, struct thread *td); -static int atm_aal5_listen(struct socket *, struct thread *td); +static int atm_aal5_listen(struct socket *, int backlog, + struct thread *td); static int atm_aal5_connect(struct socket *, struct sockaddr *, struct thread *td); static int atm_aal5_accept(struct socket *, struct sockaddr **); @@ -328,13 +329,14 @@ atm_aal5_bind(so, addr, td) * */ static int -atm_aal5_listen(so, td) +atm_aal5_listen(so, backlog, td) struct socket *so; + int backlog; struct thread *td; { ATM_INTRO("listen"); - err = atm_sock_listen(so, &atm_aal5_endpt); + err = atm_sock_listen(so, &atm_aal5_endpt, backlog); ATM_OUTRO(); } diff --git a/sys/netatm/atm_cm.c b/sys/netatm/atm_cm.c index 60bf482..12b9f53 100644 --- a/sys/netatm/atm_cm.c +++ b/sys/netatm/atm_cm.c @@ -536,12 +536,13 @@ done: * */ int -atm_cm_listen(so, epp, token, ap, copp) +atm_cm_listen(so, epp, token, ap, copp, backlog) struct socket *so; Atm_endpoint *epp; void *token; Atm_attributes *ap; Atm_connection **copp; + int backlog; { Atm_connection *cop; int s, err = 0; @@ -737,7 +738,7 @@ atm_cm_listen(so, epp, token, ap, copp) cop->co_state = COS_LISTEN; LINK2TAIL(cop, Atm_connection, atm_listen_queue, co_next); if (so != NULL) - solisten_proto(so); + solisten_proto(so, backlog); donex: (void) splx(s); diff --git a/sys/netatm/atm_socket.c b/sys/netatm/atm_socket.c index 7da8f3e..2cdab95 100644 --- a/sys/netatm/atm_socket.c +++ b/sys/netatm/atm_socket.c @@ -335,9 +335,10 @@ atm_sock_bind(so, addr) * */ int -atm_sock_listen(so, epp) +atm_sock_listen(so, epp, backlog) struct socket *so; Atm_endpoint *epp; + int backlog; { Atm_pcb *atp = sotoatmpcb(so); @@ -350,7 +351,8 @@ atm_sock_listen(so, epp) /* * Start listening for incoming calls */ - return (atm_cm_listen(so, epp, atp, &atp->atp_attr, &atp->atp_conn)); + return (atm_cm_listen(so, epp, atp, &atp->atp_attr, &atp->atp_conn, + backlog)); } diff --git a/sys/netatm/atm_var.h b/sys/netatm/atm_var.h index 3332c92..4bc6d97 100644 --- a/sys/netatm/atm_var.h +++ b/sys/netatm/atm_var.h @@ -82,7 +82,7 @@ void atm_aal5_init(void); int atm_cm_connect(Atm_endpoint *, void *, Atm_attributes *, Atm_connection **); int atm_cm_listen(struct socket *, Atm_endpoint *, void *, - Atm_attributes *, Atm_connection **); + Atm_attributes *, Atm_connection **, int); int atm_cm_addllc(Atm_endpoint *, void *, struct attr_llc *, Atm_connection *, Atm_connection **); int atm_cm_addparty(Atm_connection *, int, struct t_atm_sap *); @@ -152,7 +152,7 @@ void atm_sock_init(void); int atm_sock_attach(struct socket *, u_long, u_long); int atm_sock_detach(struct socket *); int atm_sock_bind(struct socket *, struct sockaddr *); -int atm_sock_listen(struct socket *, Atm_endpoint *); +int atm_sock_listen(struct socket *, Atm_endpoint *, int); int atm_sock_connect(struct socket *, struct sockaddr *, Atm_endpoint *); int atm_sock_disconnect(struct socket *); diff --git a/sys/netatm/ipatm/ipatm_load.c b/sys/netatm/ipatm/ipatm_load.c index 2e931cd..4376b66 100644 --- a/sys/netatm/ipatm/ipatm_load.c +++ b/sys/netatm/ipatm/ipatm_load.c @@ -524,7 +524,7 @@ ipatm_start() */ if ((err = atm_cm_listen(NULL, &ipatm_endpt, (void *)(intptr_t)i, &ipatm_listeners[i].attr, - &ipatm_listeners[i].conn)) != 0) + &ipatm_listeners[i].conn, -1)) != 0) goto done; } |