From nobody Tue Jan 31 20:03:19 2023 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4P5ww820yNz3c8RG; Tue, 31 Jan 2023 20:03:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4P5ww76JHyz3CyJ; Tue, 31 Jan 2023 20:03:19 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1675195399; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=xmsLXXz5KtwEePA1y1RIp9dbSm2630zj99zUZY7l35M=; b=KIqo9JMks+5gQ/FBFF4Hrz96eOoURlASuiU3E3Ckpi4I+8otDdq9OiAQH/k3BIuadPQHFL OgJDDCZwK+bi0vRD9wHDlvGQaoYIyAgVfWWMsT8kH8E2UWmgjxeRu0K41m60ddcm+YMPtY Fy9qAs3hUb2JNA6RgPiN1+dse6zqQphXBeNuE4sCXHsOPbxa5ti2ChlO74rcjzrcg84GuL FwV/RvjKez45sQcSaXaOzcGOG0OdNeVAMvm4pwTRP3PHR74ZtVMl27QV+5f2jG35R5c85F jqQ/JQDFS/lk4nDVHn+ltVfjla6NzL/lTeAsznacJkHPV64qTEAnnkDo4/26oQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1675195399; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=xmsLXXz5KtwEePA1y1RIp9dbSm2630zj99zUZY7l35M=; b=cxkJ2yvviNryG1Dy4OAU9aBwao9mWomIZGP9uZWFdVbJIyLjGsCLIvLIb48gBaUzKQD4Cp zzdpTp2KZ0fovxNxnC21MPZqqevu8TMmI1SF0SZET0fQjFJ7k0/vEvtq7aC3Dl003+XFaO aqJCM42RSbC+FwojaRxphCBnU+fL2+jEe2eMDBurbbiMwIaCVI4+XPUeEFpnZja7UKYczR gJplaVFQ1flE25P+HobQpXqVQuqNuCqq1UaPu26n6IMP07DSZJnaBttZjiTHBrxB5dMFVq DRhoxZ5BqG0jcoXruvzxczO8+3mLDz00tuNFLVMkEqUtUW0V53NoUK+jdQgI/w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1675195399; a=rsa-sha256; cv=none; b=W/Q6xnwHxE12yoH/wXsKOIq5ldRlvF4Ov8ToDcSYIJgZZDlNabJYE7OH/J/Y5rVrLNTJdm 0XCfDUT/fo4S8ZgMAASNTXBuDvtjmXYvFhcz7PqBQCVI7OUC5ic2Noxb9N+ZGv2y2hX9o0 bIzCo389oiQdZaLs0eFEVqHHKT5Q/gA4cBNsxvBxJxDu4yUqLo1bGXz9bQEWzpiy+Rn+nQ P3XJhOIi88u5l4BPIa3TKhgP/752CDxeS1R6U2EU2HY0EzT6y5FQ3i5Ai7qIQdO5aQfF2M XsWVZ0n0K4q740Tz+vk6JN3/YvvVzqlsEwnsgj7G26K7BF3FmuL2LDmt49OjjA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4P5ww75NWcz12KJ; Tue, 31 Jan 2023 20:03:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 30VK3JHi024998; Tue, 31 Jan 2023 20:03:19 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 30VK3JL1024997; Tue, 31 Jan 2023 20:03:19 GMT (envelope-from git) Date: Tue, 31 Jan 2023 20:03:19 GMT Message-Id: <202301312003.30VK3JL1024997@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Justin Hibbits Subject: git: 0d2684e15e41 - main - IfAPI: Add some more accessors List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhibbits X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0d2684e15e415cef652e0f75e88962a674bffe04 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=0d2684e15e415cef652e0f75e88962a674bffe04 commit 0d2684e15e415cef652e0f75e88962a674bffe04 Author: Justin Hibbits AuthorDate: 2023-01-24 21:12:08 +0000 Commit: Justin Hibbits CommitDate: 2023-01-31 20:02:17 +0000 IfAPI: Add some more accessors Summary: * if_setreassignfn for wireguard. * if_getinputfn() and if_getstartfn() for various drivers. Use the function descriptor typedefs for these and the setters. * vlantrunk accessor. This is used by VLAN_CAPABILITIES() used by several drivers, as well as directly by mxge(4). * if_pcp member accessor, used by cxgbe. * accessors for netmap adapter. Sponsored by: Juniper Networks, Inc. Reviewed By: glebius Differential Revision: https://reviews.freebsd.org/D38202 --- sys/net/if.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++ sys/net/if_private.h | 3 +- sys/net/if_var.h | 24 ++++++++++-- sys/net/if_vlan_var.h | 4 +- 4 files changed, 126 insertions(+), 7 deletions(-) diff --git a/sys/net/if.c b/sys/net/if.c index 1a42b562190d..ac8b6963172d 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -4616,6 +4616,18 @@ if_setsendqlen(if_t ifp, int tx_desc_count) return (0); } +void +if_setnetmapadapter(if_t ifp, struct netmap_adapter *na) +{ + ifp->if_netmap = na; +} + +struct netmap_adapter * +if_getnetmapadapter(if_t ifp) +{ + return (ifp->if_netmap); +} + int if_vlantrunkinuse(if_t ifp) { @@ -4759,6 +4771,12 @@ if_setinputfn(if_t ifp, if_input_fn_t input_fn) ((struct ifnet *)ifp)->if_input = input_fn; } +if_input_fn_t +if_getinputfn(if_t ifp) +{ + return (ifp->if_input); +} + void if_setioctlfn(if_t ifp, if_ioctl_fn_t ioctl_fn) { @@ -4777,12 +4795,24 @@ if_setstartfn(if_t ifp, if_start_fn_t start_fn) ((struct ifnet *)ifp)->if_start = (void *)start_fn; } +if_start_fn_t +if_getstartfn(if_t ifp) +{ + return (ifp->if_start); +} + void if_settransmitfn(if_t ifp, if_transmit_fn_t start_fn) { ((struct ifnet *)ifp)->if_transmit = start_fn; } +if_transmit_fn_t +if_gettransmitfn(if_t ifp) +{ + return (ifp->if_transmit); +} + void if_setqflushfn(if_t ifp, if_qflush_fn_t flush_fn) { @@ -4803,6 +4833,18 @@ if_setgetcounterfn(if_t ifp, if_get_counter_t fn) ifp->if_get_counter = fn; } +void +if_setreassignfn(if_t ifp, if_reassign_fn_t fn) +{ + ifp->if_reassign = fn; +} + +void +if_setratelimitqueryfn(if_t ifp, if_ratelimit_query_t fn) +{ + ifp->if_ratelimit_query = fn; +} + void if_setdebugnet_methods(if_t ifp, struct debugnet_methods *m) { @@ -4839,6 +4881,66 @@ if_setllsoftc(if_t ifp, void *llsoftc) ifp->if_llsoftc = llsoftc; }; +int +if_getlinkstate(if_t ifp) +{ + return (ifp->if_link_state); +} + +const uint8_t * +if_getbroadcastaddr(if_t ifp) +{ + return (ifp->if_broadcastaddr); +} + +int +if_getnumadomain(if_t ifp) +{ + return (ifp->if_numa_domain); +} + +uint64_t +if_getcounter(if_t ifp, ift_counter counter) +{ + return (ifp->if_get_counter(ifp, counter)); +} + +struct vnet * +if_getvnet(if_t ifp) +{ + return (ifp->if_vnet); +} + +void * +if_getafdata(if_t ifp, int af) +{ + return (ifp->if_afdata[af]); +} + +u_int +if_getfib(if_t ifp) +{ + return (ifp->if_fib); +} + +struct bpf_if * +if_getbpf(if_t ifp) +{ + return (ifp->if_bpf); +} + +struct ifvlantrunk * +if_getvlantrunk(if_t ifp) +{ + return (ifp->if_vlantrunk); +} + +uint8_t +if_getpcp(if_t ifp) +{ + return (ifp->if_pcp); +} + #ifdef DDB static void if_show_ifnet(struct ifnet *ifp) diff --git a/sys/net/if_private.h b/sys/net/if_private.h index 70212e79d077..64ebf83f5850 100644 --- a/sys/net/if_private.h +++ b/sys/net/if_private.h @@ -135,8 +135,7 @@ struct ifnet { if_qflush_fn_t if_qflush; /* flush any queue */ if_transmit_fn_t if_transmit; /* initiate output routine */ - void (*if_reassign) /* reassign to vnet routine */ - (struct ifnet *, struct vnet *, char *); + if_reassign_fn_t if_reassign; /* reassign to vnet routine */ if_get_counter_t if_get_counter; /* get counter values */ int (*if_requestencap) /* make link header from request */ (struct ifnet *, struct if_encap_req *); diff --git a/sys/net/if_var.h b/sys/net/if_var.h index 3b293cdff26f..be7a5f059a7e 100644 --- a/sys/net/if_var.h +++ b/sys/net/if_var.h @@ -133,6 +133,7 @@ typedef int (*if_output_fn_t) typedef void (*if_qflush_fn_t)(if_t); typedef int (*if_transmit_fn_t)(if_t, struct mbuf *); typedef uint64_t (*if_get_counter_t)(if_t, ift_counter); +typedef void (*if_reassign_fn_t)(struct ifnet *, struct vnet *, char *); struct ifnet_hw_tsomax { u_int tsomaxbytes; /* TSO total burst length limit in bytes */ @@ -590,6 +591,7 @@ int if_setdev(if_t ifp, void *dev); int if_setdrvflagbits(if_t ifp, int if_setflags, int clear_flags); int if_getdrvflags(const if_t ifp); int if_setdrvflags(if_t ifp, int flags); +int if_getlinkstate(if_t ifp); int if_clearhwassist(if_t ifp); int if_sethwassistbits(if_t ifp, int toset, int toclear); int if_sethwassist(if_t ifp, int hwassist_bit); @@ -600,12 +602,16 @@ void *if_getsoftc(if_t ifp); int if_setflags(if_t ifp, int flags); void if_setllsoftc(if_t ifp, void *softc); void *if_getllsoftc(if_t ifp); +u_int if_getfib(if_t ifp); int if_gethwaddr(const if_t ifp, struct ifreq *); +const uint8_t *if_getbroadcastaddr(const if_t ifp); int if_setmtu(if_t ifp, int mtu); int if_getmtu(const if_t ifp); int if_getmtu_family(const if_t ifp, int family); int if_setflagbits(if_t ifp, int set, int clear); +int if_setflags(if_t ifp, int flags); int if_getflags(const if_t ifp); +int if_getnumadomain(if_t ifp); int if_sendq_empty(if_t ifp); int if_setsendqready(if_t ifp); int if_setsendqlen(if_t ifp, int tx_desc_count); @@ -615,6 +621,8 @@ int if_sethwtsomaxsegsize(if_t ifp, u_int if_hw_tsomaxsegsize); u_int if_gethwtsomax(const if_t ifp); u_int if_gethwtsomaxsegcount(const if_t ifp); u_int if_gethwtsomaxsegsize(const if_t ifp); +void if_setnetmapadapter(if_t ifp, struct netmap_adapter *na); +struct netmap_adapter *if_getnetmapadapter(if_t ifp); int if_input(if_t ifp, struct mbuf* sendmp); int if_sendq_prepend(if_t ifp, struct mbuf *m); struct mbuf *if_dequeue(if_t ifp); @@ -624,14 +632,20 @@ void if_setvtag(struct mbuf *m, u_int16_t tag); u_int16_t if_getvtag(struct mbuf *m); int if_vlantrunkinuse(if_t ifp); caddr_t if_getlladdr(const if_t ifp); +struct vnet *if_getvnet(const if_t ifp); void *if_gethandle(u_char); void if_bpfmtap(if_t ifp, struct mbuf *m); void if_etherbpfmtap(if_t ifp, struct mbuf *m); void if_vlancap(if_t ifp); int if_transmit(if_t ifp, struct mbuf *m); int if_init(if_t ifp, void *ctx); +uint64_t if_getcounter(if_t ifp, ift_counter counter); struct label *if_getmaclabel(if_t ifp); void if_setmaclabel(if_t ifp, struct label *label); +struct bpf_if *if_getbpf(if_t ifp); +uint8_t if_getpcp(if_t ifp); +struct ifvlantrunk *if_getvlantrunk(if_t ifp); +void *if_getafdata(if_t ifp, int); /* * Traversing through interface address lists. @@ -651,15 +665,19 @@ u_int if_foreach_addr_type(if_t ifp, int type, if_addr_cb_t cb, void *cb_arg); /* Functions */ void if_setinitfn(if_t ifp, if_init_fn_t); void if_setinputfn(if_t ifp, if_input_fn_t); +if_input_fn_t if_getinputfn(if_t ifp); void if_setioctlfn(if_t ifp, if_ioctl_fn_t); -void if_setoutputfn(if_t ifp, int(*) - (if_t, struct mbuf *, const struct sockaddr *, struct route *)); -void if_setstartfn(if_t ifp, void (*)(if_t)); +void if_setoutputfn(if_t ifp, if_output_fn_t); +void if_setstartfn(if_t ifp, if_start_fn_t); +if_start_fn_t if_getstartfn(if_t ifp); void if_settransmitfn(if_t ifp, if_transmit_fn_t); +if_transmit_fn_t if_gettransmitfn(if_t ifp); void if_setqflushfn(if_t ifp, if_qflush_fn_t); void if_setgetcounterfn(if_t ifp, if_get_counter_t); void if_setsndtagallocfn(if_t ifp, if_snd_tag_alloc_t); void if_setdebugnet_methods(struct ifnet *, struct debugnet_methods *); +void if_setreassignfn(if_t ifp, if_reassign_fn_t); +void if_setratelimitqueryfn(if_t ifp, if_ratelimit_query_t); /* TSO */ void if_hw_tsomax_common(if_t ifp, struct ifnet_hw_tsomax *); diff --git a/sys/net/if_vlan_var.h b/sys/net/if_vlan_var.h index b383d0898c9a..fb05cddc03bd 100644 --- a/sys/net/if_vlan_var.h +++ b/sys/net/if_vlan_var.h @@ -138,7 +138,7 @@ struct ether_8021q_tag { }; #define VLAN_CAPABILITIES(_ifp) do { \ - if ((_ifp)->if_vlantrunk != NULL) \ + if (if_getvlantrunk(_ifp) != NULL) \ (*vlan_trunk_cap_p)(_ifp); \ } while (0) @@ -154,7 +154,7 @@ struct ether_8021q_tag { (if_gettype(_ifp) == IFT_L2VLAN ? \ (*vlan_setcookie_p)((_ifp), (_cookie)) : EINVAL) #define VLAN_DEVAT(_ifp, _vid) \ - ((_ifp)->if_vlantrunk != NULL ? (*vlan_devat_p)((_ifp), (_vid)) : NULL) + (if_getvlantrunk(_ifp) != NULL ? (*vlan_devat_p)((_ifp), (_vid)) : NULL) extern void (*vlan_trunk_cap_p)(struct ifnet *); extern struct ifnet *(*vlan_trunkdev_p)(struct ifnet *);