From 607ad6b4520556b1e66bada100c5449a5d2ef3a0 Mon Sep 17 00:00:00 2001 From: Martin Pieuchot <mpi@cvs.openbsd.org> Date: Wed, 6 Jun 2018 07:12:53 +0000 Subject: Prefix fields of pfkey & routing PCBs, part 2, no functionnal change. ok tb@ --- sys/net/pfkeyv2.c | 71 ++++++++++++++++++++++++++-------------------------- sys/net/rtsock.c | 75 ++++++++++++++++++++++++++++--------------------------- 2 files changed, 74 insertions(+), 72 deletions(-) (limited to 'sys/net') diff --git a/sys/net/pfkeyv2.c b/sys/net/pfkeyv2.c index ccb771ed3af..5ace5c77fd5 100644 --- a/sys/net/pfkeyv2.c +++ b/sys/net/pfkeyv2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pfkeyv2.c,v 1.182 2018/06/06 07:10:12 mpi Exp $ */ +/* $OpenBSD: pfkeyv2.c,v 1.183 2018/06/06 07:12:51 mpi Exp $ */ /* * @(#)COPYRIGHT 1.1 (NRL) 17 January 1995 @@ -140,11 +140,11 @@ struct keycb { #define kcb_proto kcb_rcb.rcb_proto SRPL_ENTRY(keycb) kcb_list; - struct refcnt refcnt; - int flags; - uint32_t pid; - uint32_t registration; /* Increase if SATYPE_MAX > 31 */ - unsigned int rdomain; + struct refcnt kcb_refcnt; + int kcb_flags; + uint32_t kcb_pid; + uint32_t kcb_registration; /* Inc. if SATYPE_MAX > 31 */ + unsigned int kcb_rdomain; }; #define sotokeycb(so) ((struct keycb *)(so)->so_pcb) @@ -225,7 +225,7 @@ keycb_ref(void *null, void *v) { struct keycb *kp = v; - refcnt_take(&kp->refcnt); + refcnt_take(&kp->kcb_refcnt); } void @@ -233,7 +233,7 @@ keycb_unref(void *null, void *v) { struct keycb *kp = v; - refcnt_rele_wake(&kp->refcnt); + refcnt_rele_wake(&kp->kcb_refcnt); } void @@ -260,7 +260,7 @@ pfkeyv2_attach(struct socket *so, int proto) kp = malloc(sizeof(struct keycb), M_PCB, M_WAITOK | M_ZERO); so->so_pcb = kp; - refcnt_init(&kp->refcnt); + refcnt_init(&kp->kcb_refcnt); error = soreserve(so, RAWSNDQ, RAWRCVQ); if (error) { @@ -276,8 +276,8 @@ pfkeyv2_attach(struct socket *so, int proto) soisconnected(so); kp->kcb_faddr = &pfkey_addr; - kp->pid = curproc->p_p->ps_pid; - kp->rdomain = rtable_l2(curproc->p_p->ps_rtableid); + kp->kcb_pid = curproc->p_p->ps_pid; + kp->kcb_rdomain = rtable_l2(curproc->p_p->ps_rtableid); rw_enter(&pfkey_cb.kcb_lk, RW_WRITE); SRPL_INSERT_HEAD_LOCKED(&pfkey_cb.kcb_rc, &pfkey_cb.kcb, kp, kcb_list); @@ -300,13 +300,13 @@ pfkeyv2_detach(struct socket *so) if (kp == NULL) return ENOTCONN; - if (kp->flags & + if (kp->kcb_flags & (PFKEYV2_SOCKETFLAGS_REGISTERED|PFKEYV2_SOCKETFLAGS_PROMISC)) { mtx_enter(&pfkeyv2_mtx); - if (kp->flags & PFKEYV2_SOCKETFLAGS_REGISTERED) + if (kp->kcb_flags & PFKEYV2_SOCKETFLAGS_REGISTERED) nregistered--; - if (kp->flags & PFKEYV2_SOCKETFLAGS_PROMISC) + if (kp->kcb_flags & PFKEYV2_SOCKETFLAGS_PROMISC) npromisc--; mtx_leave(&pfkeyv2_mtx); } @@ -317,7 +317,7 @@ pfkeyv2_detach(struct socket *so) rw_exit(&pfkey_cb.kcb_lk); /* wait for all references to drop */ - refcnt_finalize(&kp->refcnt, "pfkeyrefs"); + refcnt_finalize(&kp->kcb_refcnt, "pfkeyrefs"); so->so_pcb = NULL; KASSERT((so->so_state & SS_NOFDREF) == 0); @@ -469,9 +469,9 @@ pfkeyv2_sendmessage(void **headers, int mode, struct socket *so, * original destination. */ SRPL_FOREACH(s, &sr, &pfkey_cb.kcb, kcb_list) { - if ((s->flags & PFKEYV2_SOCKETFLAGS_PROMISC) && + if ((s->kcb_flags & PFKEYV2_SOCKETFLAGS_PROMISC) && (s->kcb_socket != so) && - (s->rdomain == rdomain)) + (s->kcb_rdomain == rdomain)) pfkey_sendup(s, packet, 1); } SRPL_LEAVE(&sr); @@ -484,13 +484,13 @@ pfkeyv2_sendmessage(void **headers, int mode, struct socket *so, * the specified satype (e.g., all IPSEC-ESP negotiators) */ SRPL_FOREACH(s, &sr, &pfkey_cb.kcb, kcb_list) { - if ((s->flags & PFKEYV2_SOCKETFLAGS_REGISTERED) && - (s->rdomain == rdomain)) { + if ((s->kcb_flags & PFKEYV2_SOCKETFLAGS_REGISTERED) && + (s->kcb_rdomain == rdomain)) { if (!satype) /* Just send to everyone registered */ pfkey_sendup(s, packet, 1); else { /* Check for specified satype */ - if ((1 << satype) & s->registration) + if ((1 << satype) & s->kcb_registration) pfkey_sendup(s, packet, 1); } } @@ -515,9 +515,9 @@ pfkeyv2_sendmessage(void **headers, int mode, struct socket *so, /* Send to all registered promiscuous listeners */ SRPL_FOREACH(s, &sr, &pfkey_cb.kcb, kcb_list) { - if ((s->flags & PFKEYV2_SOCKETFLAGS_PROMISC) && - !(s->flags & PFKEYV2_SOCKETFLAGS_REGISTERED) && - (s->rdomain == rdomain)) + if ((s->kcb_flags & PFKEYV2_SOCKETFLAGS_PROMISC) && + !(s->kcb_flags & PFKEYV2_SOCKETFLAGS_REGISTERED) && + (s->kcb_rdomain == rdomain)) pfkey_sendup(s, packet, 1); } SRPL_LEAVE(&sr); @@ -527,7 +527,7 @@ pfkeyv2_sendmessage(void **headers, int mode, struct socket *so, case PFKEYV2_SENDMESSAGE_BROADCAST: /* Send message to all sockets */ SRPL_FOREACH(s, &sr, &pfkey_cb.kcb, kcb_list) { - if (s->rdomain == rdomain) + if (s->kcb_rdomain == rdomain) pfkey_sendup(s, packet, 1); } SRPL_LEAVE(&sr); @@ -1026,7 +1026,7 @@ pfkeyv2_send(struct socket *so, void *message, int len) goto ret; } - rdomain = kp->rdomain; + rdomain = kp->kcb_rdomain; /* If we have any promiscuous listeners, send them a copy of the message */ if (promisc) { @@ -1056,8 +1056,8 @@ pfkeyv2_send(struct socket *so, void *message, int len) /* Send to all promiscuous listeners */ SRPL_FOREACH(bkp, &sr, &pfkey_cb.kcb, kcb_list) { - if ((bkp->flags & PFKEYV2_SOCKETFLAGS_PROMISC) && - (bkp->rdomain == rdomain)) + if ((bkp->kcb_flags & PFKEYV2_SOCKETFLAGS_PROMISC) && + (bkp->kcb_rdomain == rdomain)) pfkey_sendup(bkp, packet, 1); } SRPL_LEAVE(&sr); @@ -1448,8 +1448,8 @@ pfkeyv2_send(struct socket *so, void *message, int len) break; case SADB_REGISTER: - if (!(kp->flags & PFKEYV2_SOCKETFLAGS_REGISTERED)) { - kp->flags |= PFKEYV2_SOCKETFLAGS_REGISTERED; + if (!(kp->kcb_flags & PFKEYV2_SOCKETFLAGS_REGISTERED)) { + kp->kcb_flags |= PFKEYV2_SOCKETFLAGS_REGISTERED; mtx_enter(&pfkeyv2_mtx); nregistered++; mtx_leave(&pfkeyv2_mtx); @@ -1481,7 +1481,8 @@ pfkeyv2_send(struct socket *so, void *message, int len) } /* Keep track what this socket has registered for */ - kp->registration |= (1 << ((struct sadb_msg *)message)->sadb_msg_satype); + kp->kcb_registration |= + (1 << ((struct sadb_msg *)message)->sadb_msg_satype); ssup = (struct sadb_supported *) freeme; ssup->sadb_supported_len = i / sizeof(uint64_t); @@ -1831,9 +1832,9 @@ pfkeyv2_send(struct socket *so, void *message, int len) SRPL_FOREACH(bkp, &sr, &pfkey_cb.kcb, kcb_list) { if ((bkp != kp) && - (bkp->rdomain == rdomain) && + (bkp->kcb_rdomain == rdomain) && (!smsg->sadb_msg_seq || - (smsg->sadb_msg_seq == kp->pid))) + (smsg->sadb_msg_seq == kp->kcb_pid))) pfkey_sendup(bkp, packet, 1); } SRPL_LEAVE(&sr); @@ -1845,19 +1846,19 @@ pfkeyv2_send(struct socket *so, void *message, int len) goto ret; } - i = (kp->flags & + i = (kp->kcb_flags & PFKEYV2_SOCKETFLAGS_PROMISC) ? 1 : 0; j = smsg->sadb_msg_satype ? 1 : 0; if (i ^ j) { if (j) { - kp->flags |= + kp->kcb_flags |= PFKEYV2_SOCKETFLAGS_PROMISC; mtx_enter(&pfkeyv2_mtx); npromisc++; mtx_leave(&pfkeyv2_mtx); } else { - kp->flags &= + kp->kcb_flags &= ~PFKEYV2_SOCKETFLAGS_PROMISC; mtx_enter(&pfkeyv2_mtx); npromisc--; diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index e73d306d294..e701b12fdf7 100644 --- a/sys/net/rtsock.c +++ b/sys/net/rtsock.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rtsock.c,v 1.267 2018/06/06 07:10:12 mpi Exp $ */ +/* $OpenBSD: rtsock.c,v 1.268 2018/06/06 07:12:52 mpi Exp $ */ /* $NetBSD: rtsock.c,v 1.18 1996/03/29 00:32:10 cgd Exp $ */ /* @@ -142,12 +142,12 @@ struct routecb { #define rop_proto rop_rcb.rcb_proto SRPL_ENTRY(routecb) rop_list; - struct refcnt refcnt; - struct timeout timeout; - unsigned int msgfilter; - unsigned int flags; - u_int rtableid; - u_char priority; + struct refcnt rop_refcnt; + struct timeout rop_timeout; + unsigned int rop_msgfilter; + unsigned int rop_flags; + u_int rop_rtableid; + u_char rop_priority; }; #define sotoroutecb(so) ((struct routecb *)(so)->so_pcb) @@ -184,7 +184,7 @@ rcb_ref(void *null, void *v) { struct routecb *rop = v; - refcnt_take(&rop->refcnt); + refcnt_take(&rop->rop_refcnt); } void @@ -192,7 +192,7 @@ rcb_unref(void *null, void *v) { struct routecb *rop = v; - refcnt_rele_wake(&rop->refcnt); + refcnt_rele_wake(&rop->rop_refcnt); } int @@ -216,10 +216,10 @@ route_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, * If we are in a FLUSH state, check if the buffer is * empty so that we can clear the flag. */ - if (((rop->flags & ROUTECB_FLAG_FLUSH) != 0) && + if (((rop->rop_flags & ROUTECB_FLAG_FLUSH) != 0) && ((sbspace(rop->rop_socket, &rop->rop_socket->so_rcv) == rop->rop_socket->so_rcv.sb_hiwat))) - rop->flags &= ~ROUTECB_FLAG_FLUSH; + rop->rop_flags &= ~ROUTECB_FLAG_FLUSH; break; default: @@ -243,8 +243,8 @@ route_attach(struct socket *so, int proto) rop = malloc(sizeof(struct routecb), M_PCB, M_WAITOK|M_ZERO); so->so_pcb = rop; /* Init the timeout structure */ - timeout_set(&rop->timeout, rtm_senddesync, rop); - refcnt_init(&rop->refcnt); + timeout_set(&rop->rop_timeout, rtm_senddesync, rop); + refcnt_init(&rop->rop_refcnt); if (curproc == NULL) error = EACCES; @@ -259,7 +259,7 @@ route_attach(struct socket *so, int proto) rop->rop_proto.sp_family = so->so_proto->pr_domain->dom_family; rop->rop_proto.sp_protocol = proto; - rop->rtableid = curproc->p_p->ps_rtableid; + rop->rop_rtableid = curproc->p_p->ps_rtableid; soisconnected(so); so->so_options |= SO_USELOOPBACK; @@ -287,7 +287,7 @@ route_detach(struct socket *so) rw_enter(&route_cb.rcb_lk, RW_WRITE); - timeout_del(&rop->timeout); + timeout_del(&rop->rop_timeout); route_cb.any_count--; SRPL_REMOVE_LOCKED(&route_cb.rcb_rc, &route_cb.rcb, @@ -295,7 +295,7 @@ route_detach(struct socket *so) rw_exit(&route_cb.rcb_lk); /* wait for all references to drop */ - refcnt_finalize(&rop->refcnt, "rtsockrefs"); + refcnt_finalize(&rop->rop_refcnt, "rtsockrefs"); so->so_pcb = NULL; KASSERT((so->so_state & SS_NOFDREF) == 0); @@ -322,7 +322,7 @@ route_ctloutput(int op, struct socket *so, int level, int optname, if (m == NULL || m->m_len != sizeof(unsigned int)) error = EINVAL; else - rop->msgfilter = *mtod(m, unsigned int *); + rop->rop_msgfilter = *mtod(m, unsigned int *); break; case ROUTE_TABLEFILTER: if (m == NULL || m->m_len != sizeof(unsigned int)) { @@ -333,7 +333,7 @@ route_ctloutput(int op, struct socket *so, int level, int optname, if (tid != RTABLE_ANY && !rtable_exists(tid)) error = ENOENT; else - rop->rtableid = tid; + rop->rop_rtableid = tid; break; case ROUTE_PRIOFILTER: if (m == NULL || m->m_len != sizeof(unsigned int)) { @@ -344,7 +344,7 @@ route_ctloutput(int op, struct socket *so, int level, int optname, if (prio > RTP_MAX) error = EINVAL; else - rop->priority = prio; + rop->rop_priority = prio; break; default: error = ENOPROTOOPT; @@ -355,15 +355,15 @@ route_ctloutput(int op, struct socket *so, int level, int optname, switch (optname) { case ROUTE_MSGFILTER: m->m_len = sizeof(unsigned int); - *mtod(m, unsigned int *) = rop->msgfilter; + *mtod(m, unsigned int *) = rop->rop_msgfilter; break; case ROUTE_TABLEFILTER: m->m_len = sizeof(unsigned int); - *mtod(m, unsigned int *) = rop->rtableid; + *mtod(m, unsigned int *) = rop->rop_rtableid; break; case ROUTE_PRIOFILTER: m->m_len = sizeof(unsigned int); - *mtod(m, unsigned int *) = rop->priority; + *mtod(m, unsigned int *) = rop->rop_priority; break; default: error = ENOPROTOOPT; @@ -382,7 +382,7 @@ rtm_senddesync(void *data) rop = (struct routecb *)data; /* If we are in a DESYNC state, try to send a RTM_DESYNC packet */ - if ((rop->flags & ROUTECB_FLAG_DESYNC) == 0) + if ((rop->rop_flags & ROUTECB_FLAG_DESYNC) == 0) return; /* @@ -394,14 +394,14 @@ rtm_senddesync(void *data) struct socket *so = rop->rop_socket; if (sbappendaddr(so, &so->so_rcv, &route_src, desync_mbuf, NULL) != 0) { - rop->flags &= ~ROUTECB_FLAG_DESYNC; + rop->rop_flags &= ~ROUTECB_FLAG_DESYNC; sorwakeup(rop->rop_socket); return; } m_freem(desync_mbuf); } /* Re-add timeout to try sending msg again */ - timeout_add(&rop->timeout, ROUTE_DESYNC_RESEND_TIMEOUT); + timeout_add(&rop->rop_timeout, ROUTE_DESYNC_RESEND_TIMEOUT); } void @@ -443,10 +443,11 @@ route_input(struct mbuf *m0, struct socket *so, sa_family_t sa_family) /* filter messages that the process does not want */ rtm = mtod(m, struct rt_msghdr *); /* but RTM_DESYNC can't be filtered */ - if (rtm->rtm_type != RTM_DESYNC && rop->msgfilter != 0 && - !(rop->msgfilter & (1 << rtm->rtm_type))) + if (rtm->rtm_type != RTM_DESYNC && rop->rop_msgfilter != 0 && + !(rop->rop_msgfilter & (1 << rtm->rtm_type))) continue; - if (rop->priority != 0 && rop->priority < rtm->rtm_priority) + if (rop->rop_priority != 0 && + rop->rop_priority < rtm->rtm_priority) continue; switch (rtm->rtm_type) { case RTM_IFANNOUNCE: @@ -458,14 +459,14 @@ route_input(struct mbuf *m0, struct socket *so, sa_family_t sa_family) case RTM_DELADDR: case RTM_IFINFO: /* check against rdomain id */ - if (rop->rtableid != RTABLE_ANY && - rtable_l2(rop->rtableid) != rtm->rtm_tableid) + if (rop->rop_rtableid != RTABLE_ANY && + rtable_l2(rop->rop_rtableid) != rtm->rtm_tableid) continue; break; default: /* check against rtable id */ - if (rop->rtableid != RTABLE_ANY && - rop->rtableid != rtm->rtm_tableid) + if (rop->rop_rtableid != RTABLE_ANY && + rop->rop_rtableid != rtm->rtm_tableid) continue; break; } @@ -474,22 +475,22 @@ route_input(struct mbuf *m0, struct socket *so, sa_family_t sa_family) * Check to see if the flush flag is set. If so, don't queue * any more messages until the flag is cleared. */ - if ((rop->flags & ROUTECB_FLAG_FLUSH) != 0) + if ((rop->rop_flags & ROUTECB_FLAG_FLUSH) != 0) continue; if (last) { rtm_sendup(last, m, 1); - refcnt_rele_wake(&sotoroutecb(last)->refcnt); + refcnt_rele_wake(&sotoroutecb(last)->rop_refcnt); } /* keep a reference for last */ - refcnt_take(&rop->refcnt); + refcnt_take(&rop->rop_refcnt); last = rop->rop_socket; } SRPL_LEAVE(&sr); if (last) { rtm_sendup(last, m, 0); - refcnt_rele_wake(&sotoroutecb(last)->refcnt); + refcnt_rele_wake(&sotoroutecb(last)->rop_refcnt); } else m_freem(m); } @@ -510,7 +511,7 @@ rtm_sendup(struct socket *so, struct mbuf *m0, int more) if (sbspace(so, &so->so_rcv) < (2 * MSIZE) || sbappendaddr(so, &so->so_rcv, &route_src, m, NULL) == 0) { /* Flag socket as desync'ed and flush required */ - rop->flags |= ROUTECB_FLAG_DESYNC | ROUTECB_FLAG_FLUSH; + rop->rop_flags |= ROUTECB_FLAG_DESYNC | ROUTECB_FLAG_FLUSH; rtm_senddesync(rop); m_freem(m); return (ENOBUFS); -- cgit v1.2.3