summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkrw <krw@openbsd.org>2013-12-06 23:40:48 +0000
committerkrw <krw@openbsd.org>2013-12-06 23:40:48 +0000
commit393831bbedc65a4a425784816f0f67da4143199d (patch)
tree9392b1bbcd903a0c8547998794899b80a8432b0c
parentMake clflush() flush the cache line specified by the address we pass it (diff)
downloadwireguard-openbsd-393831bbedc65a4a425784816f0f67da4143199d.tar.xz
wireguard-openbsd-393831bbedc65a4a425784816f0f67da4143199d.zip
Having stopped pretending we handle anything but ethernet packets,
replace the 'struct hardware' abstraction layer and use 'struct ether_addr' where hardware addresses are of interest. ok matthew@, confirmed by reyk@ not to impact DHCP-over-IPSec support.
-rw-r--r--sbin/dhclient/bpf.c6
-rw-r--r--sbin/dhclient/dhclient.c25
-rw-r--r--sbin/dhclient/dhcpd.h22
-rw-r--r--sbin/dhclient/dispatch.c21
-rw-r--r--sbin/dhclient/options.c17
-rw-r--r--sbin/dhclient/packet.c23
-rw-r--r--sbin/dhclient/parse.c17
7 files changed, 59 insertions, 72 deletions
diff --git a/sbin/dhclient/bpf.c b/sbin/dhclient/bpf.c
index 992e2b3b1e8..7620d048cac 100644
--- a/sbin/dhclient/bpf.c
+++ b/sbin/dhclient/bpf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bpf.c,v 1.29 2013/11/11 21:00:01 krw Exp $ */
+/* $OpenBSD: bpf.c,v 1.30 2013/12/06 23:40:48 krw Exp $ */
/* BPF socket interface code, originally contributed by Archie Cobbs. */
@@ -262,7 +262,7 @@ if_register_receive(void)
ssize_t
send_packet(struct in_addr from, struct sockaddr_in *to,
- struct hardware *hto)
+ struct ether_addr *hto)
{
#define IOVCNT 2
unsigned char buf[256];
@@ -302,7 +302,7 @@ send_packet(struct in_addr from, struct sockaddr_in *to,
}
ssize_t
-receive_packet(struct sockaddr_in *from, struct hardware *hfrom)
+receive_packet(struct sockaddr_in *from, struct ether_addr *hfrom)
{
int length = 0, offset = 0;
struct bpf_hdr hdr;
diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c
index a32c173087c..01a28085f83 100644
--- a/sbin/dhclient/dhclient.c
+++ b/sbin/dhclient/dhclient.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dhclient.c,v 1.273 2013/12/05 21:32:59 krw Exp $ */
+/* $OpenBSD: dhclient.c,v 1.274 2013/12/06 23:40:48 krw Exp $ */
/*
* Copyright 2004 Henning Brauer <henning@openbsd.org>
@@ -204,7 +204,7 @@ routehandler(void)
struct in_addr a, b;
ssize_t n;
int linkstat, rslt;
- struct hardware hw;
+ struct ether_addr hw;
struct rt_msghdr *rtm;
struct if_msghdr *ifm;
struct ifa_msghdr *ifam;
@@ -1477,8 +1477,8 @@ make_discover(struct client_lease *lease)
client->bootrequest_packet_length = BOOTP_MIN_LEN;
packet->op = BOOTREQUEST;
- packet->htype = ifi->hw_address.htype;
- packet->hlen = ifi->hw_address.hlen;
+ packet->htype = HTYPE_ETHER ;
+ packet->hlen = ETHER_ADDR_LEN;
packet->hops = 0;
packet->xid = client->xid;
packet->secs = 0; /* filled in by send_discover. */
@@ -1488,7 +1488,8 @@ make_discover(struct client_lease *lease)
memset(&packet->yiaddr, 0, sizeof(packet->yiaddr));
memset(&packet->siaddr, 0, sizeof(packet->siaddr));
memset(&packet->giaddr, 0, sizeof(packet->giaddr));
- memcpy(&packet->chaddr, ifi->hw_address.haddr, ifi->hw_address.hlen);
+ memcpy(&packet->chaddr, ifi->hw_address.ether_addr_octet,
+ ETHER_ADDR_LEN);
}
void
@@ -1546,8 +1547,8 @@ make_request(struct client_lease * lease)
client->bootrequest_packet_length = BOOTP_MIN_LEN;
packet->op = BOOTREQUEST;
- packet->htype = ifi->hw_address.htype;
- packet->hlen = ifi->hw_address.hlen;
+ packet->htype = HTYPE_ETHER ;
+ packet->hlen = ETHER_ADDR_LEN;
packet->hops = 0;
packet->xid = client->xid;
packet->secs = 0; /* Filled in by send_request. */
@@ -1569,7 +1570,8 @@ make_request(struct client_lease * lease)
memset(&packet->yiaddr, 0, sizeof(packet->yiaddr));
memset(&packet->siaddr, 0, sizeof(packet->siaddr));
memset(&packet->giaddr, 0, sizeof(packet->giaddr));
- memcpy(&packet->chaddr, ifi->hw_address.haddr, ifi->hw_address.hlen);
+ memcpy(&packet->chaddr, ifi->hw_address.ether_addr_octet,
+ ETHER_ADDR_LEN);
}
void
@@ -1614,8 +1616,8 @@ make_decline(struct client_lease *lease)
client->bootrequest_packet_length = BOOTP_MIN_LEN;
packet->op = BOOTREQUEST;
- packet->htype = ifi->hw_address.htype;
- packet->hlen = ifi->hw_address.hlen;
+ packet->htype = HTYPE_ETHER ;
+ packet->hlen = ETHER_ADDR_LEN;
packet->hops = 0;
packet->xid = client->xid;
packet->secs = 0; /* Filled in by send_request. */
@@ -1626,7 +1628,8 @@ make_decline(struct client_lease *lease)
memset(&packet->yiaddr, 0, sizeof(packet->yiaddr));
memset(&packet->siaddr, 0, sizeof(packet->siaddr));
memset(&packet->giaddr, 0, sizeof(packet->giaddr));
- memcpy(&packet->chaddr, ifi->hw_address.haddr, ifi->hw_address.hlen);
+ memcpy(&packet->chaddr, ifi->hw_address.ether_addr_octet,
+ ETHER_ADDR_LEN);
}
void
diff --git a/sbin/dhclient/dhcpd.h b/sbin/dhclient/dhcpd.h
index d51836e5521..a711c79f201 100644
--- a/sbin/dhclient/dhcpd.h
+++ b/sbin/dhclient/dhcpd.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: dhcpd.h,v 1.124 2013/11/19 15:12:23 mikeb Exp $ */
+/* $OpenBSD: dhcpd.h,v 1.125 2013/12/06 23:40:48 krw Exp $ */
/*
* Copyright (c) 2004 Henning Brauer <henning@openbsd.org>
@@ -93,12 +93,6 @@ struct reject_elem {
struct in_addr addr;
};
-struct hardware {
- u_int8_t htype;
- u_int8_t hlen;
- u_int8_t haddr[16];
-};
-
struct client_lease {
TAILQ_ENTRY(client_lease) next;
time_t expiry, renewal, rebind;
@@ -172,7 +166,7 @@ struct client_state {
};
struct interface_info {
- struct hardware hw_address;
+ struct ether_addr hw_address;
struct in_addr primary_address;
char name[IFNAMSIZ];
int rfdesc;
@@ -216,7 +210,7 @@ extern volatile sig_atomic_t quit;
/* options.c */
int cons_options(struct option_data *);
char *pretty_print_option(unsigned int, struct option_data *, int);
-void do_packet(unsigned int, struct in_addr, struct hardware *);
+void do_packet(unsigned int, struct in_addr, struct ether_addr *);
/* errwarn.c */
extern int warnings_occurred;
@@ -240,7 +234,7 @@ void skip_to_semi(FILE *);
int parse_semi(FILE *);
char *parse_string(FILE *);
int parse_ip_addr(FILE *, struct in_addr *);
-void parse_hardware_param(FILE *, struct hardware *);
+void parse_hardware_param(FILE *, struct ether_addr *);
void parse_lease_time(FILE *, time_t *);
void convert_num(unsigned char *, char *, int, int);
time_t parse_date(FILE *);
@@ -248,8 +242,8 @@ time_t parse_date(FILE *);
/* bpf.c */
void if_register_send(void);
void if_register_receive(void);
-ssize_t send_packet(struct in_addr, struct sockaddr_in *, struct hardware *);
-ssize_t receive_packet(struct sockaddr_in *, struct hardware *);
+ssize_t send_packet(struct in_addr, struct sockaddr_in *, struct ether_addr *);
+ssize_t receive_packet(struct sockaddr_in *, struct ether_addr *);
/* dispatch.c */
void discover_interface(void);
@@ -290,10 +284,10 @@ void free_client_lease(struct client_lease *);
void routehandler(void);
/* packet.c */
-void assemble_hw_header(unsigned char *, int *, struct hardware *);
+void assemble_hw_header(unsigned char *, int *, struct ether_addr *);
void assemble_udp_ip_header(unsigned char *, int *, u_int32_t, u_int32_t,
unsigned int, unsigned char *, int);
-ssize_t decode_hw_header(unsigned char *, int, struct hardware *);
+ssize_t decode_hw_header(unsigned char *, int, struct ether_addr *);
ssize_t decode_udp_ip_header(unsigned char *, int, struct sockaddr_in *,
int);
diff --git a/sbin/dhclient/dispatch.c b/sbin/dhclient/dispatch.c
index 30db8aa984f..f83f38036d6 100644
--- a/sbin/dhclient/dispatch.c
+++ b/sbin/dhclient/dispatch.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dispatch.c,v 1.85 2013/12/05 21:32:59 krw Exp $ */
+/* $OpenBSD: dispatch.c,v 1.86 2013/12/06 23:40:48 krw Exp $ */
/*
* Copyright 2004 Henning Brauer <henning@openbsd.org>
@@ -84,21 +84,22 @@ discover_interface(void)
struct sockaddr_dl *foo =
(struct sockaddr_dl *)ifa->ifa_addr;
+ if (foo->sdl_alen != ETHER_ADDR_LEN)
+ continue;
+
ifi->index = foo->sdl_index;
- ifi->hw_address.hlen = foo->sdl_alen;
- ifi->hw_address.htype = HTYPE_ETHER; /* XXX */
- memcpy(ifi->hw_address.haddr, LLADDR(foo),
- foo->sdl_alen);
+ memcpy(ifi->hw_address.ether_addr_octet, LLADDR(foo),
+ ETHER_ADDR_LEN);
opt = &config->send_options[DHO_DHCP_CLIENT_IDENTIFIER];
if (opt->len == 0) {
/* Build default client identifier. */
- data = calloc(1, foo->sdl_alen + 1);
+ data = calloc(1, ETHER_ADDR_LEN + 1);
if (data != NULL) {
- data[0] = ifi->hw_address.htype;
+ data[0] = HTYPE_ETHER;
memcpy(&data[1], LLADDR(foo),
- foo->sdl_alen);
+ ETHER_ADDR_LEN);
opt->data = data;
- opt->len = foo->sdl_alen + 1;
+ opt->len = ETHER_ADDR_LEN + 1;
}
}
}
@@ -237,7 +238,7 @@ void
got_one(void)
{
struct sockaddr_in from;
- struct hardware hfrom;
+ struct ether_addr hfrom;
struct in_addr ifrom;
ssize_t result;
diff --git a/sbin/dhclient/options.c b/sbin/dhclient/options.c
index 88c13d61906..eb5777eea73 100644
--- a/sbin/dhclient/options.c
+++ b/sbin/dhclient/options.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: options.c,v 1.56 2013/07/11 01:34:00 krw Exp $ */
+/* $OpenBSD: options.c,v 1.57 2013/12/06 23:40:48 krw Exp $ */
/* DHCP options parsing and reassembly. */
@@ -454,7 +454,7 @@ toobig:
void
do_packet(unsigned int from_port, struct in_addr from,
- struct hardware *hfrom)
+ struct ether_addr *hfrom)
{
struct dhcp_packet *packet = &client->packet;
struct option_data options[256];
@@ -463,14 +463,14 @@ do_packet(unsigned int from_port, struct in_addr from,
char *type, *info;
int i, rslt, options_valid = 1;
- if (ifi->hw_address.hlen != packet->hlen) {
+ if (packet->hlen != ETHER_ADDR_LEN) {
#ifdef DEBUG
debug("Discarding packet with hlen != %s (%u)",
ifi->name, packet->hlen);
#endif
return;
- } else if (memcmp(ifi->hw_address.haddr, packet->chaddr,
- packet->hlen)) {
+ } else if (memcmp(&ifi->hw_address, packet->chaddr,
+ sizeof(ifi->hw_address))) {
#ifdef DEBUG
debug("Discarding packet with chaddr != %s (%s)", ifi->name,
ether_ntoa((struct ether_addr *)packet->chaddr));
@@ -552,11 +552,8 @@ do_packet(unsigned int from_port, struct in_addr from,
#endif
}
- if (hfrom->hlen == 6)
- rslt = asprintf(&info, "%s from %s (%s)", type, inet_ntoa(from),
- ether_ntoa((struct ether_addr *)hfrom->haddr));
- else
- rslt = asprintf(&info, "%s from %s", type, inet_ntoa(from));
+ rslt = asprintf(&info, "%s from %s (%s)", type, inet_ntoa(from),
+ ether_ntoa(hfrom));
if (rslt == -1)
error("no memory for info string");
diff --git a/sbin/dhclient/packet.c b/sbin/dhclient/packet.c
index f6e94bca489..3eb39dd5c50 100644
--- a/sbin/dhclient/packet.c
+++ b/sbin/dhclient/packet.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: packet.c,v 1.21 2013/12/05 21:32:59 krw Exp $ */
+/* $OpenBSD: packet.c,v 1.22 2013/12/06 23:40:48 krw Exp $ */
/* Packet assembly code, originally contributed by Archie Cobbs. */
@@ -83,19 +83,18 @@ wrapsum(u_int32_t sum)
}
void
-assemble_hw_header(unsigned char *buf, int *bufix, struct hardware *to)
+assemble_hw_header(unsigned char *buf, int *bufix, struct ether_addr *to)
{
struct ether_header eh;
- if (to != NULL && to->hlen == 6) /* XXX */
- memcpy(eh.ether_dhost, to->haddr, sizeof(eh.ether_dhost));
+ if (to != NULL)
+ memcpy(eh.ether_dhost, to->ether_addr_octet,
+ sizeof(eh.ether_dhost));
else
memset(eh.ether_dhost, 0xff, sizeof(eh.ether_dhost));
- if (ifi->hw_address.hlen == sizeof(eh.ether_shost))
- memcpy(eh.ether_shost, ifi->hw_address.haddr,
- sizeof(eh.ether_shost));
- else
- memset(eh.ether_shost, 0x00, sizeof(eh.ether_shost));
+
+ memcpy(eh.ether_shost, ifi->hw_address.ether_addr_octet,
+ sizeof(eh.ether_shost));
eh.ether_type = htons(ETHERTYPE_IP);
@@ -141,15 +140,13 @@ assemble_udp_ip_header(unsigned char *buf, int *bufix, u_int32_t from,
}
ssize_t
-decode_hw_header(unsigned char *buf, int bufix, struct hardware *from)
+decode_hw_header(unsigned char *buf, int bufix, struct ether_addr *from)
{
struct ether_header eh;
memcpy(&eh, buf + bufix, ETHER_HDR_LEN);
- memcpy(from->haddr, eh.ether_shost, sizeof(eh.ether_shost));
- from->htype = ARPHRD_ETHER;
- from->hlen = sizeof(eh.ether_shost);
+ memcpy(from->ether_addr_octet, eh.ether_shost, sizeof(eh.ether_shost));
return (sizeof(eh));
}
diff --git a/sbin/dhclient/parse.c b/sbin/dhclient/parse.c
index cbb76519f34..6814a2fdf83 100644
--- a/sbin/dhclient/parse.c
+++ b/sbin/dhclient/parse.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: parse.c,v 1.27 2013/12/05 22:31:35 krw Exp $ */
+/* $OpenBSD: parse.c,v 1.28 2013/12/06 23:40:48 krw Exp $ */
/* Common parser code for dhcpd and dhclient. */
@@ -145,24 +145,19 @@ parse_ip_addr(FILE *cfile, struct in_addr *addr)
* csns :== NUMBER | csns COLON NUMBER
*/
void
-parse_hardware_param(FILE *cfile, struct hardware *hardware)
+parse_hardware_param(FILE *cfile, struct ether_addr *hardware)
{
int token;
token = next_token(NULL, cfile);
- switch (token) {
- case TOK_ETHERNET:
- hardware->htype = HTYPE_ETHER;
- hardware->hlen = 6;
- break;
- default:
- parse_warn("expecting a network hardware type");
+ if (token != TOK_ETHERNET) {
+ parse_warn("expecting 'ethernet'");
skip_to_semi(cfile);
return;
}
- if (parse_numeric_aggregate(cfile, hardware->haddr, hardware->hlen,
- ':', 16) == 0)
+ if (parse_numeric_aggregate(cfile, hardware->ether_addr_octet,
+ ETHER_ADDR_LEN, ':', 16) == 0)
return;
token = next_token(NULL, cfile);