changeset 3052:b55c354d0748 draft

Fix casting with htons()
author Roy Marples <roy@marples.name>
date Sat, 28 Mar 2015 09:44:22 +0000
parents 90ffbe9c2cfd
children 698875ddf8f3
files arp.c if-bsd.c if.h
diffstat 3 files changed, 9 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/arp.c	Fri Mar 27 11:17:28 2015 +0000
+++ b/arp.c	Sat Mar 28 09:44:22 2015 +0000
@@ -54,7 +54,7 @@
 	(sizeof(struct arphdr) + (2 * sizeof(uint32_t)) + (2 * HWADDR_LEN))
 
 static ssize_t
-arp_send(const struct interface *ifp, int op, in_addr_t sip, in_addr_t tip)
+arp_request(const struct interface *ifp, in_addr_t sip, in_addr_t tip)
 {
 	uint8_t arp_buffer[ARP_LEN];
 	struct arphdr ar;
@@ -65,7 +65,7 @@
 	ar.ar_pro = htons(ETHERTYPE_IP);
 	ar.ar_hln = ifp->hwlen;
 	ar.ar_pln = sizeof(sip);
-	ar.ar_op = htons(op);
+	ar.ar_op = htons(ARPOP_REQUEST);
 
 	p = arp_buffer;
 	len = 0;
@@ -223,8 +223,7 @@
 		    "%s: ARP announcing %s (%d of %d)",
 		    ifp->name, inet_ntoa(astate->addr),
 		    astate->claims, ANNOUNCE_NUM);
-	if (arp_send(ifp, ARPOP_REQUEST,
-		astate->addr.s_addr, astate->addr.s_addr) == -1)
+	if (arp_request(ifp, astate->addr.s_addr, astate->addr.s_addr) == -1)
 		logger(ifp->ctx, LOG_ERR, "send_arp: %m");
 	eloop_timeout_add_sec(ifp->ctx->eloop, ANNOUNCE_WAIT,
 	    astate->claims < ANNOUNCE_NUM ? arp_announce1 : arp_announced,
@@ -271,7 +270,7 @@
 	    ifp->name, inet_ntoa(astate->addr),
 	    astate->probes ? astate->probes : PROBE_NUM, PROBE_NUM,
 	    timespec_to_double(&tv));
-	if (arp_send(ifp, ARPOP_REQUEST, 0, astate->addr.s_addr) == -1)
+	if (arp_request(ifp, 0, astate->addr.s_addr) == -1)
 		logger(ifp->ctx, LOG_ERR, "send_arp: %m");
 }
 
--- a/if-bsd.c	Fri Mar 27 11:17:28 2015 +0000
+++ b/if-bsd.c	Sat Mar 28 09:44:22 2015 +0000
@@ -375,7 +375,7 @@
 }
 
 ssize_t
-if_sendrawpacket(const struct interface *ifp, int protocol,
+if_sendrawpacket(const struct interface *ifp, uint16_t protocol,
     const void *data, size_t len)
 {
 	struct iovec iov[2];
@@ -401,7 +401,7 @@
 /* BPF requires that we read the entire buffer.
  * So we pass the buffer in the API so we can loop on >1 packet. */
 ssize_t
-if_readrawpacket(struct interface *ifp, int protocol,
+if_readrawpacket(struct interface *ifp, uint16_t protocol,
     void *data, size_t len, int *flags)
 {
 	int fd;
@@ -725,7 +725,7 @@
 	/* KAME based systems want to store the scope inside the sin6_addr
 	 * for link local addreses */
 	if (IN6_IS_ADDR_LINKLOCAL(&sin->sin6_addr)) {
-		uint16_t scope = htons(ifindex);
+		uint16_t scope = htons((uint16_t)ifindex);
 		memcpy(&sin->sin6_addr.s6_addr[2], &scope,
 		    sizeof(scope));
 	}
--- a/if.h	Fri Mar 27 11:17:28 2015 +0000
+++ b/if.h	Sat Mar 28 09:44:22 2015 +0000
@@ -114,8 +114,8 @@
 extern const char *if_pfname;
 int if_openrawsocket(struct interface *, int);
 ssize_t if_sendrawpacket(const struct interface *,
-    int, const void *, size_t);
-ssize_t if_readrawpacket(struct interface *, int, void *, size_t, int *);
+    uint16_t, const void *, size_t);
+ssize_t if_readrawpacket(struct interface *, uint16_t, void *, size_t, int *);
 
 int if_address(const struct interface *,
     const struct in_addr *, const struct in_addr *,