30#if defined (USE_UPF_SEND) || defined (USE_UPF_RECEIVE)
35#include <netinet/in_systm.h>
72 sprintf(filename,
"/dev/pf/pfilt%d",
b);
88 log_fatal (
"Can't attach interface %s to upf device %s: %m",
89 info -> name, filename);
93 log_fatal (
"Can't get interface %s hardware address: %m",
98 log_fatal (
"Invalid device type on network interface %s: %d",
101 if (
param.end_addr_len != 6)
102 log_fatal (
"Invalid hardware address length on %s: %d",
105 info -> hw_address.hlen = 7;
119#ifndef USE_UPF_RECEIVE
125 log_info (
"Sending on UPF/%s/%s%s%s",
138#ifndef USE_UPF_RECEIVE
143 log_info (
"Disabling output on UPF/%s/%s%s%s",
154#ifdef USE_UPF_RECEIVE
159#if defined(RELAY_PORT)
160#error "Relay port is not yet supported for UPF"
176 log_fatal (
"Can't set ALLOWCOPYALL: %m");
182 log_fatal (
"Can't clear pfilt bits: %m");
187 log_fatal (
"Can't set ENBATCH|ENCOPYALL: %m");
194 pf.enf_FilterLen = 0;
203 pf.enf_Filter [
pf.enf_FilterLen++] =
htons (0xFF);
210 log_fatal (
"Can't install packet filter program: %m");
212 log_info (
"Listening on UPF/%s/%s%s%s",
215 info -> hw_address.hlen - 1,
216 &
info -> hw_address.hbuf [1]),
228 log_info (
"Disabling input on UPF/%s/%s%s%s",
256 if (!
strcmp (interface -> name,
"fallback"))
266 (
unsigned char *)
ip, &
ibufp, from.s_addr,
268 (
unsigned char *)raw, len);
271 iov [0].iov_base = ((
char *)
hw);
273 iov [1].iov_base = ((
char *)
ip);
275 iov [2].iov_base = (
char *)raw;
276 iov [2].iov_len = len;
285#ifdef USE_UPF_RECEIVE
296 unsigned char ibuf [1500 +
sizeof (
struct enstamp)];
304 bufix =
sizeof (
struct enstamp);
320 from, length, &
paylen, 1);
365 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