I was wondering why the llc code was getting compiled and it turned out to be because I had bridging enabled. It turns out to only needs it for a single function (llc_mac_hdr_init). Converting this to a static inline like the other llc functions it uses allows to decouple the dependency Signed-off-by: Dave Jones <davej@xxxxxxxxxxxxxxxxx> diff --git include/net/llc.h include/net/llc.h index e250dca03963..edcb120ee6b0 100644 --- include/net/llc.h +++ include/net/llc.h @@ -13,6 +13,7 @@ */ #include <linux/if.h> +#include <linux/if_arp.h> #include <linux/if_ether.h> #include <linux/list.h> #include <linux/spinlock.h> @@ -100,8 +101,34 @@ extern struct list_head llc_sap_list; int llc_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev); -int llc_mac_hdr_init(struct sk_buff *skb, const unsigned char *sa, - const unsigned char *da); +/** + * llc_mac_hdr_init - fills MAC header fields + * @skb: Address of the frame to initialize its MAC header + * @sa: The MAC source address + * @da: The MAC destination address + * + * Fills MAC header fields, depending on MAC type. Returns 0, If MAC type + * is a valid type and initialization completes correctly 1, otherwise. + */ +static inline int llc_mac_hdr_init(struct sk_buff *skb, + const unsigned char *sa, const unsigned char *da) +{ + int rc = -EINVAL; + + switch (skb->dev->type) { + case ARPHRD_ETHER: + case ARPHRD_LOOPBACK: + rc = dev_hard_header(skb, skb->dev, ETH_P_802_2, da, sa, + skb->len); + if (rc > 0) + rc = 0; + break; + default: + break; + } + return rc; +} + void llc_add_pack(int type, void (*handler)(struct llc_sap *sap, struct sk_buff *skb)); diff --git net/802/Kconfig net/802/Kconfig index aaa83e888240..8bea5d1d5118 100644 --- net/802/Kconfig +++ net/802/Kconfig @@ -1,7 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only config STP tristate - select LLC config GARP tristate diff --git net/bridge/Kconfig net/bridge/Kconfig index 3c8ded7d3e84..c011856d3386 100644 --- net/bridge/Kconfig +++ net/bridge/Kconfig @@ -5,7 +5,6 @@ config BRIDGE tristate "802.1d Ethernet Bridging" - select LLC select STP depends on IPV6 || IPV6=n help diff --git net/llc/llc_output.c net/llc/llc_output.c index 5a6466fc626a..ad66886ed141 100644 --- net/llc/llc_output.c +++ net/llc/llc_output.c @@ -13,34 +13,6 @@ #include <net/llc.h> #include <net/llc_pdu.h> -/** - * llc_mac_hdr_init - fills MAC header fields - * @skb: Address of the frame to initialize its MAC header - * @sa: The MAC source address - * @da: The MAC destination address - * - * Fills MAC header fields, depending on MAC type. Returns 0, If MAC type - * is a valid type and initialization completes correctly 1, otherwise. - */ -int llc_mac_hdr_init(struct sk_buff *skb, - const unsigned char *sa, const unsigned char *da) -{ - int rc = -EINVAL; - - switch (skb->dev->type) { - case ARPHRD_ETHER: - case ARPHRD_LOOPBACK: - rc = dev_hard_header(skb, skb->dev, ETH_P_802_2, da, sa, - skb->len); - if (rc > 0) - rc = 0; - break; - default: - break; - } - return rc; -} - /** * llc_build_and_send_ui_pkt - unitdata request interface for upper layers * @sap: sap to use