summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorblambert <blambert@openbsd.org>2009-05-31 20:22:18 +0000
committerblambert <blambert@openbsd.org>2009-05-31 20:22:18 +0000
commita4b04b67393bca818fde6e24cf1c70f63bb78ba9 (patch)
tree3e3d58b2fd3ed06f4478fd27a81087eaf47444aa
parentMake iomem_ex cover the complete (48-bit) physical address space. Makes (diff)
downloadwireguard-openbsd-a4b04b67393bca818fde6e24cf1c70f63bb78ba9.tar.xz
wireguard-openbsd-a4b04b67393bca818fde6e24cf1c70f63bb78ba9.zip
Consolidate common code for interface attachment into single function
to save some space in the kernel. Although there are deeper issues with interface attachment, this diff was not meant to address those, just to shave some space ;) ok henning@, claudio@
-rw-r--r--sys/net/if.c71
1 files changed, 30 insertions, 41 deletions
diff --git a/sys/net/if.c b/sys/net/if.c
index 484fbb715a2..30e7305e745 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if.c,v 1.190 2009/05/31 04:07:03 claudio Exp $ */
+/* $OpenBSD: if.c,v 1.191 2009/05/31 20:22:18 blambert Exp $ */
/* $NetBSD: if.c,v 1.35 1996/05/07 05:26:04 thorpej Exp $ */
/*
@@ -127,6 +127,7 @@
void if_attachsetup(struct ifnet *);
void if_attachdomain1(struct ifnet *);
+void if_attach_common(struct ifnet *);
int ifqmaxlen = IFQ_MAXLEN;
@@ -410,26 +411,7 @@ if_attachdomain1(struct ifnet *ifp)
void
if_attachhead(struct ifnet *ifp)
{
- if (if_index == 0) {
- TAILQ_INIT(&ifnet);
- TAILQ_INIT(&ifg_head);
- }
- TAILQ_INIT(&ifp->if_addrlist);
- ifp->if_addrhooks = malloc(sizeof(*ifp->if_addrhooks),
- M_TEMP, M_NOWAIT);
- if (ifp->if_addrhooks == NULL)
- panic("if_attachhead: malloc");
- TAILQ_INIT(ifp->if_addrhooks);
- ifp->if_linkstatehooks = malloc(sizeof(*ifp->if_linkstatehooks),
- M_TEMP, M_NOWAIT);
- if (ifp->if_linkstatehooks == NULL)
- panic("if_attachhead: malloc");
- TAILQ_INIT(ifp->if_linkstatehooks);
- ifp->if_detachhooks = malloc(sizeof(*ifp->if_detachhooks),
- M_TEMP, M_NOWAIT);
- if (ifp->if_detachhooks == NULL)
- panic("if_attachhead: malloc");
- TAILQ_INIT(ifp->if_detachhooks);
+ if_attach_common(ifp);
TAILQ_INSERT_HEAD(&ifnet, ifp, if_list);
if_attachsetup(ifp);
}
@@ -441,26 +423,7 @@ if_attach(struct ifnet *ifp)
struct ifnet *before = NULL;
#endif
- if (if_index == 0) {
- TAILQ_INIT(&ifnet);
- TAILQ_INIT(&ifg_head);
- }
- TAILQ_INIT(&ifp->if_addrlist);
- ifp->if_addrhooks = malloc(sizeof(*ifp->if_addrhooks),
- M_TEMP, M_NOWAIT);
- if (ifp->if_addrhooks == NULL)
- panic("if_attach: malloc");
- TAILQ_INIT(ifp->if_addrhooks);
- ifp->if_linkstatehooks = malloc(sizeof(*ifp->if_linkstatehooks),
- M_TEMP, M_NOWAIT);
- if (ifp->if_linkstatehooks == NULL)
- panic("if_attach: malloc");
- TAILQ_INIT(ifp->if_linkstatehooks);
- ifp->if_detachhooks = malloc(sizeof(*ifp->if_detachhooks),
- M_TEMP, M_NOWAIT);
- if (ifp->if_detachhooks == NULL)
- panic("if_attach: malloc");
- TAILQ_INIT(ifp->if_detachhooks);
+ if_attach_common(ifp);
#if NCARP > 0
if (ifp->if_type != IFT_CARP)
@@ -481,6 +444,32 @@ if_attach(struct ifnet *ifp)
}
void
+if_attach_common(struct ifnet *ifp)
+{
+
+ if (if_index == 0) {
+ TAILQ_INIT(&ifnet);
+ TAILQ_INIT(&ifg_head);
+ }
+ TAILQ_INIT(&ifp->if_addrlist);
+ ifp->if_addrhooks = malloc(sizeof(*ifp->if_addrhooks),
+ M_TEMP, M_NOWAIT);
+ if (ifp->if_addrhooks == NULL)
+ panic("if_attach_common: malloc");
+ TAILQ_INIT(ifp->if_addrhooks);
+ ifp->if_linkstatehooks = malloc(sizeof(*ifp->if_linkstatehooks),
+ M_TEMP, M_NOWAIT);
+ if (ifp->if_linkstatehooks == NULL)
+ panic("if_attach_common: malloc");
+ TAILQ_INIT(ifp->if_linkstatehooks);
+ ifp->if_detachhooks = malloc(sizeof(*ifp->if_detachhooks),
+ M_TEMP, M_NOWAIT);
+ if (ifp->if_detachhooks == NULL)
+ panic("if_attach_common: malloc");
+ TAILQ_INIT(ifp->if_detachhooks);
+}
+
+void
if_start(struct ifnet *ifp)
{
if (IF_QFULL(&ifp->if_snd) && !ISSET(ifp->if_flags, IFF_OACTIVE)) {