/*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2008 Apple Inc. All rights reserved.
*
- * @APPLE_LICENSE_HEADER_START@
- *
- * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
+ *
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* Please see the License for the specific language governing rights and
* limitations under the License.
*
- * @APPLE_LICENSE_HEADER_END@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
*/
/*
* Copyright (c) 1985, 1986, 1993
#include <sys/kern_event.h>
#endif
-#ifdef __APPLE_API_UNSTABLE
+#ifdef PRIVATE
+#include <net/route.h>
/*
* Interface address, Internet version. One of these structures
* of the structure and is assumed to be first.
*/
struct in_ifaddr {
- struct ifaddr ia_ifa; /* protocol-independent info */
-#define ia_ifp ia_ifa.ifa_ifp
-#define ia_flags ia_ifa.ifa_flags
- /* ia_{,sub}net{,mask} in host order */
- u_long ia_net; /* network number of interface */
- u_long ia_netmask; /* mask of net part */
- u_long ia_subnet; /* subnet number, including net */
- u_long ia_subnetmask; /* mask of subnet part */
- struct in_addr ia_netbroadcast; /* to recognize net broadcasts */
- TAILQ_ENTRY(in_ifaddr) ia_link; /* tailq macro glue */
- struct sockaddr_in ia_addr; /* reserve space for interface name */
- struct sockaddr_in ia_dstaddr; /* reserve space for broadcast addr */
-#define ia_broadaddr ia_dstaddr
- struct sockaddr_in ia_sockmask; /* reserve space for general netmask */
+ struct ifaddr ia_ifa; /* protocol-independent info */
+#define ia_ifp ia_ifa.ifa_ifp
+#define ia_flags ia_ifa.ifa_flags
+ /* ia_{,sub}net{,mask} in host order */
+ u_long ia_net; /* network number of interface */
+ u_long ia_netmask; /* mask of net part */
+ u_long ia_subnet; /* subnet number, including net */
+ u_long ia_subnetmask; /* mask of subnet part */
+ struct in_addr ia_netbroadcast; /* to recognize net broadcasts */
+ TAILQ_ENTRY(in_ifaddr) ia_link; /* tailq macro glue */
+ struct sockaddr_in ia_addr; /* reserve space for interface name */
+ struct sockaddr_in ia_dstaddr; /* reserve space for broadcast addr */
+#define ia_broadaddr ia_dstaddr
+ struct sockaddr_in ia_sockmask; /* reserve space for general netmask */
};
+#endif /* PRIVATE */
struct in_aliasreq {
- char ifra_name[IFNAMSIZ]; /* if name, e.g. "en0" */
- struct sockaddr_in ifra_addr;
- struct sockaddr_in ifra_broadaddr;
-#define ifra_dstaddr ifra_broadaddr
- struct sockaddr_in ifra_mask;
-#ifdef __APPLE__
- u_long dlt;
-#endif
+ char ifra_name[IFNAMSIZ]; /* if name, e.g. "en0" */
+ struct sockaddr_in ifra_addr;
+ struct sockaddr_in ifra_broadaddr;
+#define ifra_dstaddr ifra_broadaddr
+ struct sockaddr_in ifra_mask;
+ u_int32_t ifra_unused; /* not used: used to be 'dlt' */
};
-#ifdef __APPLE__
/*
* Event data, internet style.
*/
struct kev_in_data {
struct net_event_data link_data;
- struct in_addr ia_addr;
- u_long ia_net; /* network number of interface */
- u_long ia_netmask; /* mask of net part */
- u_long ia_subnet; /* subnet number, including net */
- u_long ia_subnetmask; /* mask of subnet part */
- struct in_addr ia_netbroadcast; /* to recognize net broadcasts */
- struct in_addr ia_dstaddr;
+ struct in_addr ia_addr;
+ u_int32_t ia_net; /* network number of interface */
+ u_int32_t ia_netmask; /* mask of net part */
+ u_int32_t ia_subnet; /* subnet number, including net */
+ u_int32_t ia_subnetmask; /* mask of subnet part */
+ struct in_addr ia_netbroadcast;/* to recognize net broadcasts */
+ struct in_addr ia_dstaddr;
};
struct kev_in_collision {
- struct net_event_data link_data; /* link colliding arp was received on */
- struct in_addr ia_ipaddr; /* IP address we and another node are using */
- u_char hw_len; /* length of hardware address */
- u_char hw_addr[0]; /* variable length hardware address */
+ struct net_event_data link_data; /* link colliding arp was received on */
+ struct in_addr ia_ipaddr; /* IP address we and another node are using */
+ u_char hw_len; /* length of hardware address */
+ u_char hw_addr[0]; /* variable length hardware address */
};
+#ifdef __APPLE_API_PRIVATE
+struct kev_in_portinuse {
+ u_int16_t port; /* conflicting port number in host order */
+ u_int32_t req_pid; /* PID port requestor */
+ u_int32_t reserved[2];
+};
+#endif
+
/*
* Define inet event subclass and specific inet events.
#define KEV_INET_SIFBRDADDR 5
#define KEV_INET_SIFNETMASK 6
#define KEV_INET_ARPCOLLISION 7 /* use kev_in_collision */
-#endif /* __APPLE__ */
+#ifdef __APPLE_API_PRIVATE
+#define KEV_INET_PORTINUSE 8 /* use ken_in_portinuse */
+#endif
+
+#ifdef KERNEL_PRIVATE
/*
* Given a pointer to an in_ifaddr (ifaddr),
* return a pointer to the addr as a sockaddr_in.
#define IN_LNAOF(in, ifa) \
((ntohl((in).s_addr) & ~((struct in_ifaddr *)(ifa)->ia_subnetmask))
-#endif /* __APPLE_API_UNSTABLE */
-
-#ifdef KERNEL
-#ifdef __APPLE_API_PRIVATE
extern TAILQ_HEAD(in_ifaddrhead, in_ifaddr) in_ifaddrhead;
extern struct ifqueue ipintrq; /* ip packet input queue */
extern struct in_addr zeroin_addr;
extern u_char inetctlerrmap[];
+extern lck_mtx_t *rt_mtx;
+
+extern int apple_hwcksum_tx;
+extern int apple_hwcksum_rx;
/*
* Macro for finding the interface (ifnet structure) corresponding to one
{ \
struct in_ifaddr *ia; \
\
+ lck_mtx_assert(rt_mtx, LCK_MTX_ASSERT_NOTOWNED); \
+ lck_mtx_lock(rt_mtx); \
TAILQ_FOREACH(ia, &in_ifaddrhead, ia_link) \
if (IA_SIN(ia)->sin_addr.s_addr == (addr).s_addr) \
break; \
(ifp) = (ia == NULL) ? NULL : ia->ia_ifp; \
+ lck_mtx_unlock(rt_mtx); \
}
/*
/* struct ifnet *ifp; */ \
/* struct in_ifaddr *ia; */ \
{ \
+ lck_mtx_assert(rt_mtx, LCK_MTX_ASSERT_NOTOWNED); \
+ lck_mtx_lock(rt_mtx); \
for ((ia) = TAILQ_FIRST(&in_ifaddrhead); \
(ia) != NULL && (ia)->ia_ifp != (ifp); \
(ia) = TAILQ_NEXT((ia), ia_link)) \
continue; \
+ lck_mtx_unlock(rt_mtx); \
}
-#endif /* __APPLE_API_PRIVATE */
-#endif
-#ifdef __APPLE_API_UNSTABLE
/*
* This information should be part of the ifnet structure but we don't wish
* to change that - as it might break a number of things
u_int inm_state; /* state of the membership */
struct router_info *inm_rti; /* router info*/
};
-#endif /* __APPLE_API_UNSTABLE */
-
-#ifdef KERNEL
-#ifdef __APPLE_API_PRIVATE
#ifdef SYSCTL_DECL
SYSCTL_DECL(_net_inet_ip);
(addr).s_addr) \
break; \
} \
- (inm) = ifma ? ifma->ifma_protospec : 0; \
+ (inm) = ifma ? ifma->ifma_protospec : NULL; \
} while(0)
/*
} while(0)
struct route;
-struct in_multi *in_addmulti __P((struct in_addr *, struct ifnet *));
-void in_delmulti __P((struct in_multi *));
-int in_control __P((struct socket *, u_long, caddr_t, struct ifnet *,
- struct proc *));
-void in_rtqdrain __P((void));
-void ip_input __P((struct mbuf *));
-int in_ifadown __P((struct ifaddr *ifa, int));
-void in_ifscrub __P((struct ifnet *, struct in_ifaddr *));
-int ipflow_fastforward __P((struct mbuf *));
-void ipflow_create __P((const struct route *, struct mbuf *));
-void ipflow_slowtimo __P((void));
-
-#endif /* __APPLE_API_PRIVATE */
-#endif /* _KERNEL */
+struct in_multi *in_addmulti(struct in_addr *, struct ifnet *);
+void in_delmulti(struct in_multi **);
+int in_control(struct socket *, u_long, caddr_t, struct ifnet *,
+ struct proc *);
+void in_rtqdrain(void);
+extern struct radix_node *in_validate(struct radix_node *);
+void ip_input(struct mbuf *);
+int in_ifadown(struct ifaddr *ifa, int);
+void in_ifscrub(struct ifnet *, struct in_ifaddr *, int);
+int ipflow_fastforward(struct mbuf *);
+void ipflow_create(const struct route *, struct mbuf *);
+void ipflow_slowtimo(void);
+
+#endif /* KERNEL_PRIVATE */
/* INET6 stuff */
#include <netinet6/in6_var.h>