git: 1e6131bad6b4 - main - IfAPI: Add needed APIs for mbuf support

From: Justin Hibbits <jhibbits_at_FreeBSD.org>
Date: Mon, 06 Feb 2023 17:53:53 UTC
The branch main has been updated by jhibbits:

URL: https://cgit.FreeBSD.org/src/commit/?id=1e6131bad6b47efbd35c5e7095637ed2aeaecd70

commit 1e6131bad6b47efbd35c5e7095637ed2aeaecd70
Author:     Justin Hibbits <jhibbits@FreeBSD.org>
AuthorDate: 2023-02-01 14:56:34 +0000
Commit:     Justin Hibbits <jhibbits@FreeBSD.org>
CommitDate: 2023-02-06 17:32:04 +0000

    IfAPI: Add needed APIs for mbuf support
    
    Summary:
    Add 2 new APIs for supporting recent mbuf changes:
    * 36e0a362ac added the m_snd_tag_alloc() wrapper around
      if_snd_tag_alloc().  Push this down to the ifnet level.
    * 4d7a1361ef adds the m_rcvif_serialize()/m_rcvif_restore() KPIs to
      serialize and restore an ifnet pointer.  Add the necessary wrapper to
      get the index generation for this.
    
    Reviewed By:    jhb
    Sponsored by:   Juniper Networks, Inc.
    Differential Revision: https://reviews.freebsd.org/D38340
---
 sys/kern/kern_mbuf.c | 12 +++++-------
 sys/net/if.c         | 16 ++++++++++++++++
 sys/net/if_var.h     |  3 +++
 3 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/sys/kern/kern_mbuf.c b/sys/kern/kern_mbuf.c
index d47b1fbf3c60..84dea05f1bbb 100644
--- a/sys/kern/kern_mbuf.c
+++ b/sys/kern/kern_mbuf.c
@@ -1586,9 +1586,7 @@ m_snd_tag_alloc(struct ifnet *ifp, union if_snd_tag_alloc_params *params,
     struct m_snd_tag **mstp)
 {
 
-	if (ifp->if_snd_tag_alloc == NULL)
-		return (EOPNOTSUPP);
-	return (ifp->if_snd_tag_alloc(ifp, params, mstp));
+	return (if_snd_tag_alloc(ifp, params, mstp));
 }
 
 void
@@ -1620,13 +1618,13 @@ m_rcvif_serialize(struct mbuf *m)
 	u_short idx, gen;
 
 	M_ASSERTPKTHDR(m);
-	idx = m->m_pkthdr.rcvif->if_index;
-	gen = m->m_pkthdr.rcvif->if_idxgen;
+	idx = if_getindex(m->m_pkthdr.rcvif);
+	gen = if_getidxgen(m->m_pkthdr.rcvif);
 	m->m_pkthdr.rcvidx = idx;
 	m->m_pkthdr.rcvgen = gen;
 	if (__predict_false(m->m_pkthdr.leaf_rcvif != NULL)) {
-		idx = m->m_pkthdr.leaf_rcvif->if_index;
-		gen = m->m_pkthdr.leaf_rcvif->if_idxgen;
+		idx = if_getindex(m->m_pkthdr.leaf_rcvif);
+		gen = if_getidxgen(m->m_pkthdr.leaf_rcvif);
 	} else {
 		idx = -1;
 		gen = 0;
diff --git a/sys/net/if.c b/sys/net/if.c
index 8bb5ed0043e5..43d1e2b95a63 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -4295,6 +4295,12 @@ if_getindex(const if_t ifp)
 	return ((struct ifnet *)ifp)->if_index;
 }
 
+int
+if_getidxgen(const if_t ifp)
+{
+	return (ifp->if_idxgen);
+}
+
 void
 if_setdescr(if_t ifp, char *descrbuf)
 {
@@ -4845,6 +4851,16 @@ if_setsndtagallocfn(if_t ifp, if_snd_tag_alloc_t alloc_fn)
 	((struct ifnet *)ifp)->if_snd_tag_alloc = alloc_fn;
 }
 
+int
+if_snd_tag_alloc(struct ifnet *ifp, union if_snd_tag_alloc_params *params,
+    struct m_snd_tag **mstp)
+{
+
+	if (ifp->if_snd_tag_alloc == NULL)
+		return (EOPNOTSUPP);
+	return (ifp->if_snd_tag_alloc(ifp, params, mstp));
+}
+
 void
 if_setgetcounterfn(if_t ifp, if_get_counter_t fn)
 {
diff --git a/sys/net/if_var.h b/sys/net/if_var.h
index b4cdcf27253f..f33b4fc590c7 100644
--- a/sys/net/if_var.h
+++ b/sys/net/if_var.h
@@ -578,6 +578,7 @@ int if_setcapenablebit(if_t ifp, int setcap, int clearcap);
 int if_getcapenable(const if_t ifp);
 int if_getdunit(const if_t ifp);
 int if_getindex(const if_t ifp);
+int if_getidxgen(const if_t ifp);
 const char *if_getdname(const if_t ifp);
 void if_setdname(if_t ifp, const char *name);
 const char *if_name(if_t ifp);
@@ -650,6 +651,8 @@ bool if_altq_is_enabled(if_t ifp);
 
 void *if_getafdata(if_t ifp, int);
 
+int if_snd_tag_alloc(struct ifnet *ifp, union if_snd_tag_alloc_params *params,
+    struct m_snd_tag **mstp);
 /*
  * Traversing through interface address lists.
  */