44#if defined (USE_RAW_SEND)
51 struct sockaddr_in name;
57 name.sin_family = AF_INET;
59 name.sin_addr.s_addr = htonl (INADDR_BROADCAST);
60 memset (name.sin_zero, 0, sizeof (name.sin_zero));
65 piaddr (info -> address), htons (name.sin_port));
66 if ((sock = socket (AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
67 log_fatal (
"Can't create dhcp socket: %m");
71 if (setsockopt (sock, SOL_SOCKET, SO_BROADCAST,
72 &flag,
sizeof flag) < 0)
73 log_fatal (
"Can't set SO_BROADCAST option on dhcp socket: %m");
77 if (setsockopt (sock, IPPROTO_IP, IP_HDRINCL, &flag,
sizeof flag) < 0)
78 log_fatal (
"Can't set IP_HDRINCL flag: %m");
80 info -> wfdesc = sock;
96 log_info (
"Disabling output on Raw/%s%s%s",
109 struct sockaddr_in *to;
112 unsigned char buf [256];
114 struct iovec iov [2];
119 to -> sin_addr.s_addr, to -> sin_port,
120 (
unsigned char *)raw, len);
123 iov [0].iov_base = (
char *)buf;
124 iov [0].iov_len = bufp;
125 iov [1].iov_base = (
char *)raw;
126 iov [1].iov_len = len;
128 result = writev(interface -> wfdesc, iov, 2);
void if_deregister_send(struct interface_info *)
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)
void if_register_send(struct interface_info *)
int quiet_interface_discovery
const char * piaddr(const struct iaddr addr)
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__