--- ansh/src/utils.c 2011/10/17 20:14:02 1.2 +++ ansh/src/utils.c 2012/01/23 10:34:13 1.3 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ - * $Id: utils.c,v 1.2 2011/10/17 20:14:02 misho Exp $ + * $Id: utils.c,v 1.3 2012/01/23 10:34:13 misho Exp $ * ************************************************************************* The ELWIX and AITNET software is distributed under the following @@ -128,14 +128,14 @@ PrepareL2(const char *psDev, int *bpflen) } int -PrepareL3(const struct sockaddr *sa, int *bpflen) +PrepareL3(const io_sockaddr_t *sa, int *bpflen) { int h, n = 1; FTRACE(3); assert(sa); - h = socket(sa->sa_family, SOCK_RAW, IPPROTO_ICMP); + h = socket(sa->sa.sa_family ? sa->sa.sa_family : AF_INET, SOCK_RAW, IPPROTO_ICMP); if (h == -1) { printf("Error:: Cant open raw socket #%d - %s\n", errno, strerror(errno)); return -1; @@ -147,7 +147,7 @@ PrepareL3(const struct sockaddr *sa, int *bpflen) return -1; } */ - if (bind(h, sa, sizeof(struct sockaddr)) == -1) { + if (sa->sa.sa_family && bind(h, &sa->sa, sa->sa.sa_len) == -1) { printf("Error:: Cant bind to raw socket #%d - %s\n", errno, strerror(errno)); close(h); return -1; @@ -163,7 +163,7 @@ PrepareL3(const struct sockaddr *sa, int *bpflen) char icmpRecv(int s, u_int * __restrict seq, u_short * __restrict id, u_int * __restrict crypted, - u_char * __restrict data, int * __restrict datlen, struct sockaddr *sa, socklen_t *salen) + u_char * __restrict data, int * __restrict datlen, io_sockaddr_t *sa, socklen_t *salen) { int ret = 0; struct icmp *icmp; @@ -171,7 +171,7 @@ icmpRecv(int s, u_int * __restrict seq, u_short * __re u_char buf[USHRT_MAX] = { 0 }; u_int crc; - ret = recvfrom(s, buf, sizeof buf, 0, sa, salen); + ret = recvfrom(s, buf, sizeof buf, 0, &sa->sa, salen); if (ret == -1) { ERR("Receive recvfrom() #%d - %s", errno, strerror(errno)); return ANSH_FLG_ERR; @@ -237,7 +237,7 @@ icmpRecv(int s, u_int * __restrict seq, u_short * __re int icmpSend(int s, u_int seq, u_short id, char flg, u_int crypted, u_char *data, int datlen, - struct sockaddr *sa, socklen_t salen) + io_sockaddr_t *sa, socklen_t salen) { u_char *pos, buf[USHRT_MAX] = { 0 }; struct icmp *icmp; @@ -270,7 +270,7 @@ icmpSend(int s, u_int seq, u_short id, char flg, u_int icmp->icmp_cksum = crcIP(buf, sizeof(struct icmp) + sizeof(struct ansh_hdr) + datlen); if ((ret = sendto(s, buf, sizeof(struct icmp) + sizeof(struct ansh_hdr) + datlen, - 0, sa, salen)) == -1) { + 0, &sa->sa, salen)) == -1) { ERR("Send sendto() #%d - %s", errno, strerror(errno)); return ANSH_FLG_ERR; } else @@ -285,7 +285,7 @@ icmpSend(int s, u_int seq, u_short id, char flg, u_int } static int -_pkt_Send(int s, u_int seq, char flg, u_int crypted, u_char *data, int datlen, struct io_ether_addr *ea) +_pkt_Send(int s, u_int seq, char flg, u_int crypted, u_char *data, int datlen, io_ether_addr_t *ea) { u_char *pos, *str, buf[USHRT_MAX] = { 0 }; struct ether_header *e = (struct ether_header*) buf;