Index: sys/mbuf.h =================================================================== RCS file: /cvs/src/sys/sys/mbuf.h,v retrieving revision 1.246 diff -u -p -r1.246 mbuf.h --- sys/mbuf.h 22 Jan 2020 22:56:35 -0000 1.246 +++ sys/mbuf.h 16 Jun 2020 10:21:49 -0000 @@ -227,13 +227,14 @@ struct mbuf { #define M_ICMP_CSUM_IN_BAD 0x0800 /* ICMP/ICMPv6 checksum bad */ #define M_IPV6_DF_OUT 0x1000 /* don't fragment outgoing IPv6 */ #define M_TIMESTAMP 0x2000 /* ph_timestamp is set */ +#define M_FLOWID 0x4000 /* ph_flowid is set */ #ifdef _KERNEL #define MCS_BITS \ ("\20\1IPV4_CSUM_OUT\2TCP_CSUM_OUT\3UDP_CSUM_OUT\4IPV4_CSUM_IN_OK" \ "\5IPV4_CSUM_IN_BAD\6TCP_CSUM_IN_OK\7TCP_CSUM_IN_BAD\10UDP_CSUM_IN_OK" \ "\11UDP_CSUM_IN_BAD\12ICMP_CSUM_OUT\13ICMP_CSUM_IN_OK\14ICMP_CSUM_IN_BAD" \ - "\15IPV6_NODF_OUT" "\16TIMESTAMP") + "\15IPV6_NODF_OUT" "\16TIMESTAMP" "\17FLOWID") #endif /* mbuf types */ @@ -246,10 +247,6 @@ struct mbuf { #define MT_CONTROL 6 /* extra-data protocol message */ #define MT_OOBDATA 7 /* expedited data */ #define MT_NTYPES 8 - -/* flowid field */ -#define M_FLOWID_VALID 0x8000 /* is the flowid set */ -#define M_FLOWID_MASK 0x7fff /* flow id to map to path */ /* flags to m_get/MGET */ #include Index: dev/pci/if_mcx.c =================================================================== RCS file: /cvs/src/sys/dev/pci/if_mcx.c,v retrieving revision 1.55 diff -u -p -r1.55 if_mcx.c --- dev/pci/if_mcx.c 16 Jun 2020 02:23:40 -0000 1.55 +++ dev/pci/if_mcx.c 16 Jun 2020 10:21:49 -0000 @@ -5816,8 +5816,8 @@ mcx_process_rx(struct mcx_softc *sc, str m->m_pkthdr.len = m->m_len = bemtoh32(&cqe->cq_byte_cnt); if (cqe->cq_rx_hash_type) { - m->m_pkthdr.ph_flowid = M_FLOWID_VALID | - betoh32(cqe->cq_rx_hash); + m->m_pkthdr.ph_flowid = betoh32(cqe->cq_rx_hash); + m->m_pkthdr.csum_flags |= M_FLOWID; } flags = bemtoh32(&cqe->cq_flags); Index: net/fq_codel.c =================================================================== RCS file: /cvs/src/sys/net/fq_codel.c,v retrieving revision 1.11 diff -u -p -r1.11 fq_codel.c --- net/fq_codel.c 27 Nov 2017 16:53:04 -0000 1.11 +++ net/fq_codel.c 16 Jun 2020 10:21:49 -0000 @@ -521,8 +521,8 @@ classify_flow(struct fqcodel *fqc, struc { unsigned int index; - if (m->m_pkthdr.ph_flowid & M_FLOWID_VALID) - index = (m->m_pkthdr.ph_flowid & M_FLOWID_MASK) % fqc->nflows; + if (m->m_pkthdr.csum_flags & M_FLOWID) + index = m->m_pkthdr.ph_flowid % fqc->nflows; else index = arc4random_uniform(fqc->nflows); @@ -746,7 +746,7 @@ fqcodel_pf_addqueue(void *arg, struct pf struct ifnet *ifp = qs->kif->pfik_ifp; struct fqcodel *fqc = arg; - if (qs->flowqueue.flows == 0 || qs->flowqueue.flows > M_FLOWID_MASK) + if (qs->flowqueue.flows == 0 || qs->flowqueue.flows > 0xffffff) return (EINVAL); fqc->nflows = qs->flowqueue.flows; Index: net/if.c =================================================================== RCS file: /cvs/src/sys/net/if.c,v retrieving revision 1.606 diff -u -p -r1.606 if.c --- net/if.c 29 May 2020 04:42:25 -0000 1.606 +++ net/if.c 16 Jun 2020 10:21:49 -0000 @@ -803,8 +803,8 @@ if_output_local(struct ifnet *ifp, struc m->m_pkthdr.ph_ifidx = ifp->if_index; m->m_pkthdr.ph_rtableid = ifp->if_rdomain; - if (ISSET(m->m_pkthdr.ph_flowid, M_FLOWID_VALID)) - flow = m->m_pkthdr.ph_flowid & M_FLOWID_MASK; + if (ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) + flow = m->m_pkthdr.ph_flowid; ifiq = ifp->if_iqs[flow % ifp->if_niqs]; Index: net/if_aggr.c =================================================================== RCS file: /cvs/src/sys/net/if_aggr.c,v retrieving revision 1.30 diff -u -p -r1.30 if_aggr.c --- net/if_aggr.c 2 Jun 2020 00:58:09 -0000 1.30 +++ net/if_aggr.c 16 Jun 2020 10:21:49 -0000 @@ -660,7 +660,7 @@ aggr_transmit(struct aggr_softc *sc, con } #endif - if (ISSET(m->m_pkthdr.ph_flowid, M_FLOWID_VALID)) + if (ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) flow = m->m_pkthdr.ph_flowid; ifp0 = map->m_ifp0s[flow % AGGR_MAX_PORTS]; @@ -765,10 +765,8 @@ aggr_input(struct ifnet *ifp0, struct mb if (__predict_false(!p->p_collecting)) goto drop; - if (!ISSET(m->m_pkthdr.ph_flowid, M_FLOWID_VALID)) { - m->m_pkthdr.ph_flowid = M_FLOWID_VALID | - (ifp0->if_index ^ sc->sc_mix); - } + if (!ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) + m->m_pkthdr.ph_flowid = ifp0->if_index ^ sc->sc_mix; if_vinput(ifp, m); Index: net/if_gif.c =================================================================== RCS file: /cvs/src/sys/net/if_gif.c,v retrieving revision 1.128 diff -u -p -r1.128 if_gif.c --- net/if_gif.c 4 Oct 2019 05:00:49 -0000 1.128 +++ net/if_gif.c 16 Jun 2020 10:21:49 -0000 @@ -355,8 +355,8 @@ gif_send(struct gif_softc *sc, struct mb return (-1); flow = otos << 20; - if (ISSET(m->m_pkthdr.ph_flowid, M_FLOWID_VALID)) - flow |= m->m_pkthdr.ph_flowid & M_FLOWID_MASK; + if (ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) + flow |= m->m_pkthdr.ph_flowid; ip6 = mtod(m, struct ip6_hdr *); ip6->ip6_flow = htonl(flow); Index: net/if_gre.c =================================================================== RCS file: /cvs/src/sys/net/if_gre.c,v retrieving revision 1.156 diff -u -p -r1.156 if_gre.c --- net/if_gre.c 12 Apr 2020 11:56:52 -0000 1.156 +++ net/if_gre.c 16 Jun 2020 10:21:49 -0000 @@ -1167,8 +1167,9 @@ gre_input_key(struct mbuf **mp, int *off return (IPPROTO_DONE); if (tunnel->t_key_mask == GRE_KEY_ENTROPY) { - m->m_pkthdr.ph_flowid = M_FLOWID_VALID | - (bemtoh32(&key->t_key) & ~GRE_KEY_ENTROPY); + SET(m->m_pkthdr.csum_flags, M_FLOWID); + m->m_pkthdr.ph_flowid = + bemtoh32(&key->t_key) & ~GRE_KEY_ENTROPY; } rxprio = tunnel->t_rxhprio; @@ -1326,8 +1327,9 @@ egre_input(const struct gre_tunnel *key, return (0); if (sc->sc_tunnel.t_key_mask == GRE_KEY_ENTROPY) { - m->m_pkthdr.ph_flowid = M_FLOWID_VALID | - (bemtoh32(&key->t_key) & ~GRE_KEY_ENTROPY); + SET(m->m_pkthdr.csum_flags, M_FLOWID); + m->m_pkthdr.ph_flowid = + bemtoh32(&key->t_key) & ~GRE_KEY_ENTROPY; } m->m_flags &= ~(M_MCAST|M_BCAST); @@ -1577,8 +1579,8 @@ nvgre_input(const struct gre_tunnel *key nvgre_input_map(sc, key, mtod(m, struct ether_header *)); - m->m_pkthdr.ph_flowid = M_FLOWID_VALID | - (bemtoh32(&key->t_key) & ~GRE_KEY_ENTROPY); + SET(m->m_pkthdr.csum_flags, M_FLOWID); + m->m_pkthdr.ph_flowid = bemtoh32(&key->t_key) & ~GRE_KEY_ENTROPY; gre_l2_prio(&sc->sc_tunnel, m, otos); @@ -2132,9 +2134,9 @@ gre_encap_dst(const struct gre_tunnel *t gkh->gre_key = tunnel->t_key; if (tunnel->t_key_mask == GRE_KEY_ENTROPY && - ISSET(m->m_pkthdr.ph_flowid, M_FLOWID_VALID)) { + ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) { gkh->gre_key |= htonl(~GRE_KEY_ENTROPY & - (m->m_pkthdr.ph_flowid & M_FLOWID_MASK)); + m->m_pkthdr.ph_flowid); } } @@ -2179,8 +2181,8 @@ gre_encap_dst_ip(const struct gre_tunnel return (NULL); ip6 = mtod(m, struct ip6_hdr *); - ip6->ip6_flow = ISSET(m->m_pkthdr.ph_flowid, M_FLOWID_VALID) ? - htonl(m->m_pkthdr.ph_flowid & M_FLOWID_MASK) : 0; + ip6->ip6_flow = ISSET(m->m_pkthdr.csum_flags, M_FLOWID) ? + htonl(m->m_pkthdr.ph_flowid) : 0; ip6->ip6_vfc |= IPV6_VERSION; ip6->ip6_flow |= htonl((uint32_t)tos << 20); ip6->ip6_plen = htons(len); Index: net/if_mpip.c =================================================================== RCS file: /cvs/src/sys/net/if_mpip.c,v retrieving revision 1.8 diff -u -p -r1.8 if_mpip.c --- net/if_mpip.c 26 Jun 2019 08:13:13 -0000 1.8 +++ net/if_mpip.c 16 Jun 2020 10:21:49 -0000 @@ -496,7 +496,8 @@ mpip_input(struct mpip_softc *sc, struct label -= MPLS_LABEL_RESERVED_MAX + 1; label ^= sc->sc_flow; - m->m_pkthdr.ph_flowid = M_FLOWID_VALID | label; + SET(m->m_pkthdr.csum_flags, M_FLOWID); + m->m_pkthdr.ph_flowid = label; m_adj(m, sizeof(shim)); } else if (!MPLS_BOS_ISSET(shim)) @@ -777,8 +778,8 @@ mpip_start(struct ifnet *ifp) if (m == NULL) continue; - if (ISSET(m->m_pkthdr.ph_flowid, M_FLOWID_VALID)) - flow = m->m_pkthdr.ph_flowid & M_FLOWID_MASK; + if (ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) + flow = m->m_pkthdr.ph_flowid; flow ^= sc->sc_flow; flow += MPLS_LABEL_RESERVED_MAX + 1; Index: net/if_mpw.c =================================================================== RCS file: /cvs/src/sys/net/if_mpw.c,v retrieving revision 1.55 diff -u -p -r1.55 if_mpw.c --- net/if_mpw.c 26 Jun 2019 08:13:13 -0000 1.55 +++ net/if_mpw.c 16 Jun 2020 10:21:49 -0000 @@ -538,7 +538,8 @@ mpw_input(struct mpw_softc *sc, struct m flow = MPLS_SHIM2LABEL(shim->shim_label); flow ^= sc->sc_flow; - m->m_pkthdr.ph_flowid = M_FLOWID_VALID | flow; + SET(m->m_pkthdr.csum_flags, M_FLOWID); + m->m_pkthdr.ph_flowid = flow; } else { if (!MPLS_BOS_ISSET(shim->shim_label)) goto drop; @@ -712,8 +713,8 @@ mpw_start(struct ifnet *ifp) if (m0 == NULL) continue; - if (ISSET(m->m_pkthdr.ph_flowid, M_FLOWID_VALID)) - flow ^= m->m_pkthdr.ph_flowid & M_FLOWID_MASK; + if (ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) + flow ^= m->m_pkthdr.ph_flowid; shim = mtod(m0, struct shim_hdr *); shim->shim_label = htonl(1) & MPLS_TTL_MASK; Index: net/if_trunk.c =================================================================== RCS file: /cvs/src/sys/net/if_trunk.c,v retrieving revision 1.145 diff -u -p -r1.145 if_trunk.c --- net/if_trunk.c 21 May 2020 00:44:36 -0000 1.145 +++ net/if_trunk.c 16 Jun 2020 10:21:49 -0000 @@ -1045,8 +1045,8 @@ trunk_hashmbuf(struct mbuf *m, SIPHASH_K #endif SIPHASH_CTX ctx; - if (m->m_pkthdr.ph_flowid & M_FLOWID_VALID) - return (m->m_pkthdr.ph_flowid & M_FLOWID_MASK); + if (m->m_pkthdr.csum_flags & M_FLOWID) + return (m->m_pkthdr.ph_flowid); SipHash24_Init(&ctx, key); off = sizeof(*eh); Index: net/ifq.c =================================================================== RCS file: /cvs/src/sys/net/ifq.c,v retrieving revision 1.39 diff -u -p -r1.39 ifq.c --- net/ifq.c 21 May 2020 00:06:16 -0000 1.39 +++ net/ifq.c 16 Jun 2020 10:21:49 -0000 @@ -695,8 +695,8 @@ priq_idx(unsigned int nqueues, const str { unsigned int flow = 0; - if (ISSET(m->m_pkthdr.ph_flowid, M_FLOWID_VALID)) - flow = m->m_pkthdr.ph_flowid & M_FLOWID_MASK; + if (ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) + flow = m->m_pkthdr.ph_flowid; return (flow % nqueues); } Index: net/pf.c =================================================================== RCS file: /cvs/src/sys/net/pf.c,v retrieving revision 1.1091 diff -u -p -r1.1091 pf.c --- net/pf.c 17 Nov 2019 08:25:05 -0000 1.1091 +++ net/pf.c 16 Jun 2020 10:21:49 -0000 @@ -7177,10 +7177,8 @@ done: pf_state_key_link_inpcb(s->key[PF_SK_STACK], pd.m->m_pkthdr.pf.inp); - if (s && (pd.m->m_pkthdr.ph_flowid & M_FLOWID_VALID) == 0) { - pd.m->m_pkthdr.ph_flowid = M_FLOWID_VALID | - (M_FLOWID_MASK & bemtoh64(&s->id)); - } + if (s && (pd.m->m_pkthdr.csum_flags & M_FLOWID) == 0) + pd.m->m_pkthdr.ph_flowid = bemtoh64(&s->id); /* * connections redirected to loopback should not match sockets