version 1.219, 2016/06/30 09:44:58 |
version 1.220, 2016/07/07 09:32:02 |
Line 341 typedef struct ifnet { |
|
Line 341 typedef struct ifnet { |
|
uint16_t if_link_queue; /* masked link state change queue */ |
uint16_t if_link_queue; /* masked link state change queue */ |
struct pslist_entry if_pslist_entry; |
struct pslist_entry if_pslist_entry; |
struct psref_target if_psref; |
struct psref_target if_psref; |
|
struct pslist_head if_addr_pslist; |
#endif |
#endif |
} ifnet_t; |
} ifnet_t; |
|
|
|
|
const struct sockaddr *); |
const struct sockaddr *); |
uint32_t *ifa_seqno; |
uint32_t *ifa_seqno; |
int16_t ifa_preference; /* preference level for this address */ |
int16_t ifa_preference; /* preference level for this address */ |
|
#ifdef _KERNEL |
|
struct pslist_entry ifa_pslist_entry; |
|
#endif |
}; |
}; |
#define IFA_ROUTE RTF_UP /* (0x01) route installed */ |
#define IFA_ROUTE RTF_UP /* (0x01) route installed */ |
|
|
|
|
&(__ifp)->if_addrlist, ifa_list, __nifa) |
&(__ifp)->if_addrlist, ifa_list, __nifa) |
#define IFADDR_EMPTY(__ifp) TAILQ_EMPTY(&(__ifp)->if_addrlist) |
#define IFADDR_EMPTY(__ifp) TAILQ_EMPTY(&(__ifp)->if_addrlist) |
|
|
|
#define IFADDR_ENTRY_INIT(__ifa) \ |
|
PSLIST_ENTRY_INIT((__ifa), ifa_pslist_entry) |
|
#define IFADDR_ENTRY_DESTROY(__ifa) \ |
|
PSLIST_ENTRY_DESTROY((__ifa), ifa_pslist_entry) |
|
#define IFADDR_READER_EMPTY(__ifp) \ |
|
(PSLIST_READER_FIRST(&(__ifp)->if_addr_pslist, struct ifaddr, \ |
|
ifa_pslist_entry) == NULL) |
|
#define IFADDR_READER_FIRST(__ifp) \ |
|
PSLIST_READER_FIRST(&(__ifp)->if_addr_pslist, struct ifaddr, \ |
|
ifa_pslist_entry) |
|
#define IFADDR_READER_NEXT(__ifa) \ |
|
PSLIST_READER_NEXT((__ifa), struct ifaddr, ifa_pslist_entry) |
|
#define IFADDR_READER_FOREACH(__ifa, __ifp) \ |
|
PSLIST_READER_FOREACH((__ifa), &(__ifp)->if_addr_pslist, struct ifaddr,\ |
|
ifa_pslist_entry) |
|
#define IFADDR_WRITER_INSERT_HEAD(__ifp, __ifa) \ |
|
PSLIST_WRITER_INSERT_HEAD(&(__ifp)->if_addr_pslist, (__ifa), \ |
|
ifa_pslist_entry) |
|
#define IFADDR_WRITER_REMOVE(__ifa) \ |
|
PSLIST_WRITER_REMOVE((__ifa), ifa_pslist_entry) |
|
#define IFADDR_WRITER_FOREACH(__ifa, __ifp) \ |
|
PSLIST_WRITER_FOREACH((__ifa), &(__ifp)->if_addr_pslist, struct ifaddr,\ |
|
ifa_pslist_entry) |
|
#define IFADDR_WRITER_NEXT(__ifp) \ |
|
PSLIST_WRITER_NEXT((__ifp), struct ifaddr, ifa_pslist_entry) |
|
#define IFADDR_WRITER_INSERT_AFTER(__ifp, __new) \ |
|
PSLIST_WRITER_INSERT_AFTER((__ifp), (__new), ifa_pslist_entry) |
|
#define IFADDR_WRITER_EMPTY(__ifp) \ |
|
(PSLIST_WRITER_FIRST(&(__ifp)->if_addr_pslist, struct ifaddr, \ |
|
ifa_pslist_entry) == NULL) |
|
#define IFADDR_WRITER_INSERT_TAIL(__ifp, __new) \ |
|
do { \ |
|
if (IFADDR_WRITER_EMPTY((__ifp))) { \ |
|
IFADDR_WRITER_INSERT_HEAD((__ifp), (__new)); \ |
|
} else { \ |
|
struct ifaddr *__ifa; \ |
|
IFADDR_WRITER_FOREACH(__ifa, (__ifp)) { \ |
|
if (IFADDR_WRITER_NEXT(__ifa) == NULL) {\ |
|
IFADDR_WRITER_INSERT_AFTER(__ifa,\ |
|
(__new)); \ |
|
break; \ |
|
} \ |
|
} \ |
|
} \ |
|
} while (0) |
|
|
#define IFNET_LOCK() mutex_enter(&ifnet_mtx) |
#define IFNET_LOCK() mutex_enter(&ifnet_mtx) |
#define IFNET_UNLOCK() mutex_exit(&ifnet_mtx) |
#define IFNET_UNLOCK() mutex_exit(&ifnet_mtx) |
#define IFNET_LOCKED() mutex_owned(&ifnet_mtx) |
#define IFNET_LOCKED() mutex_owned(&ifnet_mtx) |