31#if defined (USE_NIT_SEND) || defined (USE_NIT_RECEIVE)
37#include <net/nit_if.h>
38#include <net/nit_pf.h>
39#include <net/nit_buf.h>
40#include <sys/stropts.h>
41#include <net/packetfilt.h>
43#include <netinet/in_systm.h>
84 sio.ic_len =
sizeof *(
info -> ifp);
85 sio.ic_dp = (
char *)(
info -> ifp);
88 log_fatal (
"Can't attach interface %s to nit device: %m",
97 log_fatal (
"Can't get physical layer address for %s: %m",
101 info -> hw_address.hlen = 7;
104 ifr.ifr_ifru.ifru_addr.sa_data, 6);
107 log_fatal (
"Can't push packet filter onto NIT for %s: %m",
120#ifndef USE_NIT_RECEIVE
132 sio.ic_len =
sizeof pf;
133 sio.ic_dp = (
char *)&
pf;
143 info -> hw_address.hlen - 1,
144 &
info -> hw_address.hbuf [1]),
155#ifndef USE_NIT_RECEIVE
160 log_info (
"Disabling output on NIT/%s%s%s",
170#ifdef USE_NIT_RECEIVE
175#if defined(RELAY_PORT)
176#error "Relay port is not yet supported for NIT"
196 log_fatal (
"Can't set NIT snap length on %s: %m",
info -> name);
205 log_fatal (
"Can't push chunker onto NIT STREAM: %m");
211 log_fatal (
"Can't set chunk timeout: %m");
233 pf.Pf_Filter [
pf.Pf_FilterLen++] =
htons (0xFF);
241 sio.ic_len =
sizeof pf;
242 sio.ic_dp = (
char *)&
pf;
248 log_info (
"Listening on NIT/%s%s%s",
250 info -> hw_address.hlen - 1,
251 &
info -> hw_address.hbuf [1]),
266 log_info (
"Disabling input on NIT/%s%s%s",
289 unsigned char *buf = (
unsigned char *)
ih;
295 if (!
strcmp (interface -> name,
"fallback"))
305 (
unsigned char *)&
hh[0]);
312 to ->
sin_port, (
unsigned char *)raw, len);
324 ctl.buf = (
char *)&
hh [0];
326 data.buf = (
char *)&
ih [0];
327 data.maxlen = data.len =
ibufp + len;
336#ifdef USE_NIT_RECEIVE
347 unsigned char ibuf [1536];
370 from, length, &
paylen, 1);
415 log_fatal (
"Can't register I/O handle for %s: %s",
char * print_hw_addr(int htype, const int hlen, const unsigned char *data) const
void if_reinitialize_receive(struct interface_info *)
void maybe_setup_fallback(void)
int supports_multiple_interfaces(struct interface_info *)
void if_deregister_send(struct interface_info *)
void assemble_hw_header(struct interface_info *, unsigned char *, unsigned *, struct hardware *)
ssize_t decode_udp_ip_header(struct interface_info *, unsigned char *, unsigned, struct sockaddr_in *, unsigned, unsigned *, int)
void if_reinitialize_send(struct interface_info *)
isc_result_t fallback_discard(omapi_object_t *)
ssize_t send_packet(struct interface_info *, struct packet *, struct dhcp_packet *, size_t, struct in_addr, struct sockaddr_in *, struct hardware *)
void assemble_udp_ip_header(struct interface_info *, unsigned char *, unsigned *, u_int32_t, u_int32_t, u_int32_t, unsigned char *, unsigned)
int can_receive_unicast_unconfigured(struct interface_info *)
ssize_t receive_packet(struct interface_info *, unsigned char *, size_t, struct sockaddr_in *, struct hardware *)
void if_register_receive(struct interface_info *)
ssize_t send_fallback(struct interface_info *, struct packet *, struct dhcp_packet *, size_t, struct in_addr, struct sockaddr_in *, struct hardware *)
int can_unicast_without_arp(struct interface_info *)
void if_deregister_receive(struct interface_info *)
void if_register_fallback(struct interface_info *)
ssize_t decode_hw_header(struct interface_info *, unsigned char *, unsigned, struct hardware *)
void if_register_send(struct interface_info *)
int setup_fallback(struct interface_info **fp, const char *file, int line)
int quiet_interface_discovery
int if_readsocket(omapi_object_t *h)
isc_result_t omapi_register_io_object(omapi_object_t *, int(*)(omapi_object_t *), int(*)(omapi_object_t *), isc_result_t(*)(omapi_object_t *), isc_result_t(*)(omapi_object_t *), isc_result_t(*)(omapi_object_t *))
int log_error(const char *,...) __attribute__((__format__(__printf__
void log_fatal(const char *,...) __attribute__((__format__(__printf__
int int log_info(const char *,...) __attribute__((__format__(__printf__
u_int8_t hbuf[HARDWARE_ADDR_LEN+1]
struct hardware anycast_mac_addr
struct hardware hw_address