summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2014-12-01 11:45:24 +0000
committerhselasky <hselasky@FreeBSD.org>2014-12-01 11:45:24 +0000
commit12fec3618b88732ec95820e4717a392d431ddb61 (patch)
treed86e98862d3f751374d30816df77d445c922050e /sys/net
parentc0fac76850261711c131065afbecdb475c7783f8 (diff)
downloadFreeBSD-src-12fec3618b88732ec95820e4717a392d431ddb61.zip
FreeBSD-src-12fec3618b88732ec95820e4717a392d431ddb61.tar.gz
Start process of removing the use of the deprecated "M_FLOWID" flag
from the FreeBSD network code. The flag is still kept around in the "sys/mbuf.h" header file, but does no longer have any users. Instead the "m_pkthdr.rsstype" field in the mbuf structure is now used to decide the meaning of the "m_pkthdr.flowid" field. To modify the "m_pkthdr.rsstype" field please use the existing "M_HASHTYPE_XXX" macros as defined in the "sys/mbuf.h" header file. This patch introduces new behaviour in the transmit direction. Previously network drivers checked if "M_FLOWID" was set in "m_flags" before using the "m_pkthdr.flowid" field. This check has now now been replaced by checking if "M_HASHTYPE_GET(m)" is different from "M_HASHTYPE_NONE". In the future more hashtypes will be added, for example hashtypes for hardware dedicated flows. "M_HASHTYPE_OPAQUE" indicates that the "m_pkthdr.flowid" value is valid and has no particular type. This change removes the need for an "if" statement in TCP transmit code checking for the presence of a valid flowid value. The "if" statement mentioned above is now a direct variable assignment which is then later checked by the respective network drivers like before. Additional notes: - The SCTP code changes will be committed as a separate patch. - Removal of the "M_FLOWID" flag will also be done separately. - The FreeBSD version has been bumped. MFC after: 1 month Sponsored by: Mellanox Technologies
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/flowtable.c4
-rw-r--r--sys/net/ieee8023ad_lacp.c3
-rw-r--r--sys/net/if_lagg.c7
-rw-r--r--sys/net/if_lagg.h4
-rw-r--r--sys/net/if_vxlan.c1
-rw-r--r--sys/net/netisr.c5
6 files changed, 14 insertions, 10 deletions
diff --git a/sys/net/flowtable.c b/sys/net/flowtable.c
index fe6a52c..0d584fe 100644
--- a/sys/net/flowtable.c
+++ b/sys/net/flowtable.c
@@ -688,8 +688,8 @@ flowtable_lookup(sa_family_t sa, struct mbuf *m, struct route *ro)
if (fle == NULL)
return (EHOSTUNREACH);
- if (!(m->m_flags & M_FLOWID)) {
- m->m_flags |= M_FLOWID;
+ if (M_HASHTYPE_GET(m) == M_HASHTYPE_NONE) {
+ M_HASHTYPE_SET(m, M_HASHTYPE_OPAQUE);
m->m_pkthdr.flowid = fle->f_hash;
}
diff --git a/sys/net/ieee8023ad_lacp.c b/sys/net/ieee8023ad_lacp.c
index 106df68..75f6366 100644
--- a/sys/net/ieee8023ad_lacp.c
+++ b/sys/net/ieee8023ad_lacp.c
@@ -835,7 +835,8 @@ lacp_select_tx_port(struct lagg_softc *sc, struct mbuf *m)
return (NULL);
}
- if ((sc->sc_opts & LAGG_OPT_USE_FLOWID) && (m->m_flags & M_FLOWID))
+ if ((sc->sc_opts & LAGG_OPT_USE_FLOWID) &&
+ M_HASHTYPE_GET(m) != M_HASHTYPE_NONE)
hash = m->m_pkthdr.flowid >> sc->flowid_shift;
else
hash = lagg_hashmbuf(sc, m, lsc->lsc_hashkey);
diff --git a/sys/net/if_lagg.c b/sys/net/if_lagg.c
index 5c8b2e1..45315b6 100644
--- a/sys/net/if_lagg.c
+++ b/sys/net/if_lagg.c
@@ -247,14 +247,14 @@ SYSCTL_INT(_net_link_lagg, OID_AUTO, failover_rx_all, CTLFLAG_RW | CTLFLAG_VNET,
&VNET_NAME(lagg_failover_rx_all), 0,
"Accept input from any interface in a failover lagg");
-/* Default value for using M_FLOWID */
+/* Default value for using flowid */
static VNET_DEFINE(int, def_use_flowid) = 1;
#define V_def_use_flowid VNET(def_use_flowid)
SYSCTL_INT(_net_link_lagg, OID_AUTO, default_use_flowid, CTLFLAG_RWTUN,
&VNET_NAME(def_use_flowid), 0,
"Default setting for using flow id for load sharing");
-/* Default value for using M_FLOWID */
+/* Default value for flowid shift */
static VNET_DEFINE(int, def_flowid_shift) = 16;
#define V_def_flowid_shift VNET(def_flowid_shift)
SYSCTL_INT(_net_link_lagg, OID_AUTO, default_flowid_shift, CTLFLAG_RWTUN,
@@ -2148,7 +2148,8 @@ lagg_lb_start(struct lagg_softc *sc, struct mbuf *m)
struct lagg_port *lp = NULL;
uint32_t p = 0;
- if ((sc->sc_opts & LAGG_OPT_USE_FLOWID) && (m->m_flags & M_FLOWID))
+ if ((sc->sc_opts & LAGG_OPT_USE_FLOWID) &&
+ M_HASHTYPE_GET(m) != M_HASHTYPE_NONE)
p = m->m_pkthdr.flowid >> sc->flowid_shift;
else
p = lagg_hashmbuf(sc, m, lb->lb_key);
diff --git a/sys/net/if_lagg.h b/sys/net/if_lagg.h
index e86ed06..8d6decd 100644
--- a/sys/net/if_lagg.h
+++ b/sys/net/if_lagg.h
@@ -143,9 +143,9 @@ struct lagg_reqopts {
int ro_opts; /* Option bitmap */
#define LAGG_OPT_NONE 0x00
-#define LAGG_OPT_USE_FLOWID 0x01 /* use M_FLOWID */
+#define LAGG_OPT_USE_FLOWID 0x01 /* enable use of flowid */
/* Pseudo flags which are used in ro_opts but not stored into sc_opts. */
-#define LAGG_OPT_FLOWIDSHIFT 0x02 /* Set flowid */
+#define LAGG_OPT_FLOWIDSHIFT 0x02 /* set flowid shift */
#define LAGG_OPT_FLOWIDSHIFT_MASK 0x1f /* flowid is uint32_t */
#define LAGG_OPT_LACP_STRICT 0x10 /* LACP strict mode */
#define LAGG_OPT_LACP_TXTEST 0x20 /* LACP debug: txtest */
diff --git a/sys/net/if_vxlan.c b/sys/net/if_vxlan.c
index 5badf00..59c76eb 100644
--- a/sys/net/if_vxlan.c
+++ b/sys/net/if_vxlan.c
@@ -2236,6 +2236,7 @@ vxlan_pick_source_port(struct vxlan_softc *sc, struct mbuf *m)
range = sc->vxl_max_port - sc->vxl_min_port + 1;
+ /* check if flowid is set and not opaque */
if (M_HASHTYPE_GET(m) != M_HASHTYPE_NONE &&
M_HASHTYPE_GET(m) != M_HASHTYPE_OPAQUE)
hash = m->m_pkthdr.flowid;
diff --git a/sys/net/netisr.c b/sys/net/netisr.c
index 049bbf1..178c3cb 100644
--- a/sys/net/netisr.c
+++ b/sys/net/netisr.c
@@ -682,12 +682,13 @@ netisr_select_cpuid(struct netisr_proto *npp, u_int dispatch_policy,
}
if (policy == NETISR_POLICY_FLOW) {
- if (!(m->m_flags & M_FLOWID) && npp->np_m2flow != NULL) {
+ if (M_HASHTYPE_GET(m) == M_HASHTYPE_NONE &&
+ npp->np_m2flow != NULL) {
m = npp->np_m2flow(m, source);
if (m == NULL)
return (NULL);
}
- if (m->m_flags & M_FLOWID) {
+ if (M_HASHTYPE_GET(m) != M_HASHTYPE_NONE) {
*cpuidp =
netisr_default_flow2cpu(m->m_pkthdr.flowid);
return (m);
OpenPOWER on IntegriCloud