git: fe33e0ab83d1 - main - ifnet/API: Move the IfAPI from if_var.h to if.h
Date: Thu, 12 Jan 2023 16:20:55 UTC
The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=fe33e0ab83d1fbc3c5cd4a2591ba0036e47b1fec commit fe33e0ab83d1fbc3c5cd4a2591ba0036e47b1fec Author: Justin Hibbits <jhibbits@FreeBSD.org> AuthorDate: 2023-01-11 16:56:39 +0000 Commit: Justin Hibbits <jhibbits@FreeBSD.org> CommitDate: 2023-01-12 16:25:41 +0000 ifnet/API: Move the IfAPI from if_var.h to if.h Summary: The "public" KPI for ifnet belongs in net/if.h, with net/if_var.h being implementation details for the netstack. This is the next step in enforcing that separation. Reviewed by: melifaro Sponsored by: Juniper Networks, Inc. Differential Revision: https://reviews.freebsd.org/D38030 --- sys/net/if.h | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ sys/net/if_var.h | 145 -------------------------------------------------- 2 files changed, 157 insertions(+), 145 deletions(-) diff --git a/sys/net/if.h b/sys/net/if.h index 888e7d5d7320..b46cc0fa4747 100644 --- a/sys/net/if.h +++ b/sys/net/if.h @@ -657,12 +657,169 @@ struct ifdownreason { typedef struct ifnet * if_t; +union if_snd_tag_alloc_params; +union if_snd_tag_query_params; +union if_snd_tag_modify_params; + +typedef enum { + IFCOUNTER_IPACKETS = 0, + IFCOUNTER_IERRORS, + IFCOUNTER_OPACKETS, + IFCOUNTER_OERRORS, + IFCOUNTER_COLLISIONS, + IFCOUNTER_IBYTES, + IFCOUNTER_OBYTES, + IFCOUNTER_IMCASTS, + IFCOUNTER_OMCASTS, + IFCOUNTER_IQDROPS, + IFCOUNTER_OQDROPS, + IFCOUNTER_NOPROTO, + IFCOUNTERS /* Array size. */ +} ift_counter; + + +struct mbuf; +struct route; +struct m_snd_tag; + +typedef void (*if_start_fn_t)(if_t); +typedef int (*if_ioctl_fn_t)(if_t, u_long, caddr_t); +typedef void (*if_init_fn_t)(void *); +typedef void (*if_input_fn_t)(if_t, struct mbuf *); +typedef int (*if_output_fn_t) + (if_t, struct mbuf *, const struct sockaddr *, struct route *); +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 int (if_snd_tag_alloc_t)(if_t, union if_snd_tag_alloc_params *, + struct m_snd_tag **); +typedef int (if_snd_tag_modify_t)(struct m_snd_tag *, union if_snd_tag_modify_params *); +typedef int (if_snd_tag_query_t)(struct m_snd_tag *, union if_snd_tag_query_params *); +typedef void (if_snd_tag_free_t)(struct m_snd_tag *); +typedef struct m_snd_tag *(if_next_send_tag_t)(struct m_snd_tag *); + #ifdef _KERNEL + #ifdef MALLOC_DECLARE MALLOC_DECLARE(M_IFADDR); MALLOC_DECLARE(M_IFMADDR); #endif +struct ifnet* if_alloc(u_char); +struct ifnet* if_alloc_dev(u_char, device_t dev); +void if_attach(if_t); +void if_free(if_t); +void if_initname(if_t, const char *, int); +void if_down(if_t); +void if_link_state_change(if_t, int); +int if_printf(if_t, const char *, ...) __printflike(2, 3); + +uint64_t if_get_counter_default(if_t, ift_counter); +void if_inc_counter(if_t, ift_counter, int64_t); + +uint64_t if_setbaudrate(if_t ifp, uint64_t baudrate); +uint64_t if_getbaudrate(const if_t ifp); +int if_setcapabilities(if_t ifp, int capabilities); +int if_setcapabilitiesbit(if_t ifp, int setbit, int clearbit); +int if_getcapabilities(const if_t ifp); +int if_togglecapenable(if_t ifp, int togglecap); +int if_setcapenable(if_t ifp, int capenable); +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); +const char *if_getdname(const if_t ifp); +void if_setdname(if_t ifp, const char *name); +const char *if_name(if_t ifp); +int if_setname(if_t ifp, const char *name); +void if_setdescr(if_t ifp, char *descrbuf); +char *if_allocdescr(size_t sz, int malloc_flag); +void if_freedescr(char *descrbuf); +int if_getalloctype(const if_t ifp); +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_clearhwassist(if_t ifp); +int if_sethwassistbits(if_t ifp, int toset, int toclear); +int if_sethwassist(if_t ifp, int hwassist_bit); +int if_gethwassist(const if_t ifp); +int if_togglehwassist(if_t ifp, int toggle_bits); +int if_setsoftc(if_t ifp, void *softc); +void *if_getsoftc(if_t ifp); +int if_setflags(if_t ifp, int flags); +int if_gethwaddr(const if_t ifp, struct ifreq *); +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_getflags(const 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); +int if_sethwtsomax(if_t ifp, u_int if_hw_tsomax); +int if_sethwtsomaxsegcount(if_t ifp, u_int if_hw_tsomaxsegcount); +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); +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); +int if_setifheaderlen(if_t ifp, int len); +void if_setrcvif(struct mbuf *m, if_t ifp); +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); +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); + +/* + * Traversing through interface address lists. + */ +struct sockaddr_dl; +typedef u_int iflladdr_cb_t(void *, struct sockaddr_dl *, u_int); +u_int if_foreach_lladdr(if_t, iflladdr_cb_t, void *); +u_int if_foreach_llmaddr(if_t, iflladdr_cb_t, void *); +u_int if_lladdr_count(if_t); +u_int if_llmaddr_count(if_t); + +int if_getamcount(const if_t ifp); +struct ifaddr * if_getifaddr(const if_t ifp); +typedef u_int if_addr_cb_t(void *, struct ifaddr *, u_int); +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); +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_settransmitfn(if_t ifp, if_transmit_fn_t); +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); + +/* accessors for struct ifreq */ +void *ifr_data_get_ptr(void *ifrp); +void *ifr_buffer_get_buffer(void *data); +size_t ifr_buffer_get_length(void *data); + +#ifdef DEVICE_POLLING +enum poll_cmd { POLL_ONLY, POLL_AND_CHECK_STATUS }; + +typedef int poll_handler_t(if_t ifp, enum poll_cmd cmd, int count); +int ether_poll_register(poll_handler_t *h, if_t ifp); +int ether_poll_deregister(if_t ifp); +#endif /* DEVICE_POLLING */ + extern struct sx ifnet_detach_sxlock; struct nvlist; diff --git a/sys/net/if_var.h b/sys/net/if_var.h index 2712ac74a09d..1aaabc8e3124 100644 --- a/sys/net/if_var.h +++ b/sys/net/if_var.h @@ -108,32 +108,6 @@ VNET_DECLARE(struct hhook_head *, ipsec_hhh_out[HHOOK_IPSEC_COUNT]); #define V_ipsec_hhh_out VNET(ipsec_hhh_out) #endif /* _KERNEL */ -typedef enum { - IFCOUNTER_IPACKETS = 0, - IFCOUNTER_IERRORS, - IFCOUNTER_OPACKETS, - IFCOUNTER_OERRORS, - IFCOUNTER_COLLISIONS, - IFCOUNTER_IBYTES, - IFCOUNTER_OBYTES, - IFCOUNTER_IMCASTS, - IFCOUNTER_OMCASTS, - IFCOUNTER_IQDROPS, - IFCOUNTER_OQDROPS, - IFCOUNTER_NOPROTO, - IFCOUNTERS /* Array size. */ -} ift_counter; - -typedef void (*if_start_fn_t)(if_t); -typedef int (*if_ioctl_fn_t)(if_t, u_long, caddr_t); -typedef void (*if_init_fn_t)(void *); -typedef void (*if_input_fn_t)(struct ifnet *, struct mbuf *); -typedef int (*if_output_fn_t) - (struct ifnet *, struct mbuf *, const struct sockaddr *, struct route *); -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); - struct ifnet_hw_tsomax { u_int tsomaxbytes; /* TSO total burst length limit in bytes */ u_int tsomaxsegcount; /* TSO maximum segment count */ @@ -274,13 +248,6 @@ union if_snd_tag_query_params { struct if_snd_tag_rate_limit_params tls_rate_limit; }; -typedef int (if_snd_tag_alloc_t)(struct ifnet *, union if_snd_tag_alloc_params *, - struct m_snd_tag **); -typedef int (if_snd_tag_modify_t)(struct m_snd_tag *, union if_snd_tag_modify_params *); -typedef int (if_snd_tag_query_t)(struct m_snd_tag *, union if_snd_tag_query_params *); -typedef void (if_snd_tag_free_t)(struct m_snd_tag *); -typedef struct m_snd_tag *(if_next_send_tag_t)(struct m_snd_tag *); - struct if_snd_tag_sw { if_snd_tag_modify_t *snd_tag_modify; if_snd_tag_query_t *snd_tag_query; @@ -667,9 +634,6 @@ int if_addgroup(struct ifnet *, const char *); int if_delgroup(struct ifnet *, const char *); int if_addmulti(struct ifnet *, struct sockaddr *, struct ifmultiaddr **); int if_allmulti(struct ifnet *, int); -struct ifnet* if_alloc(u_char); -struct ifnet* if_alloc_dev(u_char, device_t dev); -void if_attach(struct ifnet *); void if_dead(struct ifnet *); int if_delmulti(struct ifnet *, struct sockaddr *); void if_delmulti_ifma(struct ifmultiaddr *); @@ -677,14 +641,9 @@ void if_delmulti_ifma_flags(struct ifmultiaddr *, int flags); void if_detach(struct ifnet *); void if_purgeaddrs(struct ifnet *); void if_delallmulti(struct ifnet *); -void if_down(struct ifnet *); struct ifmultiaddr * if_findmulti(struct ifnet *, const struct sockaddr *); void if_freemulti(struct ifmultiaddr *ifma); -void if_free(struct ifnet *); -void if_initname(struct ifnet *, const char *, int); -void if_link_state_change(struct ifnet *, int); -int if_printf(struct ifnet *, const char *, ...) __printflike(2, 3); int if_log(struct ifnet *, int, const char *, ...) __printflike(3, 4); void if_ref(struct ifnet *); void if_rele(struct ifnet *); @@ -718,120 +677,16 @@ typedef void if_com_free_t(void *com, u_char type); void if_register_com_alloc(u_char type, if_com_alloc_t *a, if_com_free_t *f); void if_deregister_com_alloc(u_char type); void if_data_copy(struct ifnet *, struct if_data *); -uint64_t if_get_counter_default(struct ifnet *, ift_counter); -void if_inc_counter(struct ifnet *, ift_counter, int64_t); #define IF_LLADDR(ifp) \ LLADDR((struct sockaddr_dl *)((ifp)->if_addr->ifa_addr)) -uint64_t if_setbaudrate(if_t ifp, uint64_t baudrate); -uint64_t if_getbaudrate(const if_t ifp); -int if_setcapabilities(if_t ifp, int capabilities); -int if_setcapabilitiesbit(if_t ifp, int setbit, int clearbit); -int if_getcapabilities(const if_t ifp); -int if_togglecapenable(if_t ifp, int togglecap); -int if_setcapenable(if_t ifp, int capenable); -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); -const char *if_getdname(const if_t ifp); -void if_setdname(if_t ifp, const char *name); -const char *if_name(if_t ifp); -int if_setname(if_t ifp, const char *name); -void if_setdescr(if_t ifp, char *descrbuf); -char *if_allocdescr(size_t sz, int malloc_flag); -void if_freedescr(char *descrbuf); -int if_getalloctype(const if_t ifp); -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_clearhwassist(if_t ifp); -int if_sethwassistbits(if_t ifp, int toset, int toclear); -int if_sethwassist(if_t ifp, int hwassist_bit); -int if_gethwassist(const if_t ifp); -int if_togglehwassist(if_t ifp, int toggle_bits); -int if_setsoftc(if_t ifp, void *softc); -void *if_getsoftc(if_t ifp); -int if_setflags(if_t ifp, int flags); -int if_gethwaddr(const if_t ifp, struct ifreq *); -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_getflags(const 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); -int if_sethwtsomax(if_t ifp, u_int if_hw_tsomax); -int if_sethwtsomaxsegcount(if_t ifp, u_int if_hw_tsomaxsegcount); -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); -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); -int if_setifheaderlen(if_t ifp, int len); -void if_setrcvif(struct mbuf *m, if_t ifp); -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); -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); - -/* - * Traversing through interface address lists. - */ -struct sockaddr_dl; -typedef u_int iflladdr_cb_t(void *, struct sockaddr_dl *, u_int); -u_int if_foreach_lladdr(if_t, iflladdr_cb_t, void *); -u_int if_foreach_llmaddr(if_t, iflladdr_cb_t, void *); -u_int if_lladdr_count(if_t); -u_int if_llmaddr_count(if_t); - -int if_getamcount(const if_t ifp); -struct ifaddr * if_getifaddr(const if_t ifp); -typedef u_int if_addr_cb_t(void *, struct ifaddr *, u_int); -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); -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_settransmitfn(if_t ifp, if_transmit_fn_t); -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); - /* TSO */ void if_hw_tsomax_common(if_t ifp, struct ifnet_hw_tsomax *); int if_hw_tsomax_update(if_t ifp, struct ifnet_hw_tsomax *); -/* accessors for struct ifreq */ -void *ifr_data_get_ptr(void *ifrp); -void *ifr_buffer_get_buffer(void *data); -size_t ifr_buffer_get_length(void *data); - int ifhwioctl(u_long, struct ifnet *, caddr_t, struct thread *); -#ifdef DEVICE_POLLING -enum poll_cmd { POLL_ONLY, POLL_AND_CHECK_STATUS }; - -typedef int poll_handler_t(if_t ifp, enum poll_cmd cmd, int count); -int ether_poll_register(poll_handler_t *h, if_t ifp); -int ether_poll_deregister(if_t ifp); -#endif /* DEVICE_POLLING */ - #endif /* _KERNEL */ #include <net/ifq.h> /* XXXAO: temporary unconditional include */