diff --git a/mud b/mud index e1fd7f8..5a67c21 160000 --- a/mud +++ b/mud @@ -1 +1 @@ -Subproject commit e1fd7f8b0d2cc9ccbe9f2219c2b0e66bf721f823 +Subproject commit 5a67c21b95d579cb613087f7088e1712e20c9762 diff --git a/src/common.c b/src/common.c index 85f3459..96593dd 100644 --- a/src/common.c +++ b/src/common.c @@ -1,22 +1,24 @@ #include "common.h" -#include #include +#include -int gt_print (const char *fmt, ...) +int +gt_print(const char *fmt, ...) { va_list ap; va_start(ap, fmt); int ret = vfprintf(stdout, fmt, ap); va_end(ap); - if (ret<0) + if (ret < 0) return 0; return ret; } -void gt_log (const char *fmt, ...) +void +gt_log(const char *fmt, ...) { va_list ap; va_start(ap, fmt); @@ -24,7 +26,8 @@ void gt_log (const char *fmt, ...) va_end(ap); } -void gt_fatal (const char *fmt, ...) +void +gt_fatal(const char *fmt, ...) { va_list ap; va_start(ap, fmt); @@ -34,24 +37,26 @@ void gt_fatal (const char *fmt, ...) exit(EXIT_FAILURE); } -void gt_na (const char *name) +void +gt_na(const char *name) { gt_log("%s is not available on your platform\n", name); } -int gt_tohex (char *dst, size_t dst_size, const uint8_t *src, size_t src_size) +int +gt_tohex(char *dst, size_t dst_size, const uint8_t *src, size_t src_size) { - if _0_(!dst_size) + if (_0_(!dst_size)) return -1; - if _0_(((dst_size-1)/2)>4)]; - *dst++ = tbl[0xF&(src[i])]; + for (size_t i = 0; i < src_size; i++) { + *dst++ = tbl[0xF & (src[i] >> 4)]; + *dst++ = tbl[0xF & (src[i])]; } *dst = 0; @@ -59,37 +64,38 @@ int gt_tohex (char *dst, size_t dst_size, const uint8_t *src, size_t src_size) return 0; } -_const_ -static inline int fromhex (const char c) +_const_ static inline int +fromhex(const char c) { - if (c>='0' && c<='9') - return c-'0'; + if (c >= '0' && c <= '9') + return c - '0'; - if (c>='A' && c<='F') - return c-'A'+10; + if (c >= 'A' && c <= 'F') + return c - 'A' + 10; - if (c>='a' && c<='f') - return c-'a'+10; + if (c >= 'a' && c <= 'f') + return c - 'a' + 10; return -1; } -int gt_fromhex (uint8_t *dst, size_t dst_size, const char *src, size_t src_size) +int +gt_fromhex(uint8_t *dst, size_t dst_size, const char *src, size_t src_size) { - if _0_(src_size&1) + if (_0_(src_size & 1)) return -1; - if _0_(dst_size<(src_size/2)) + if (_0_(dst_size < (src_size / 2))) return -1; - for (size_t i=0; i>8; + const size_t pos = point >> 8; - if (pos>=size) + if (pos >= size) return 0; - return ((point|data[pos])&255)==255; + return ((point | data[pos]) & 255) == 255; } -uint8_t *db_search (uint8_t **p, uint8_t *data) +uint8_t * +db_search(uint8_t **p, uint8_t *data) { - if _0_(!*p) + if (_0_(!*p)) return NULL; uint8_t *r = *p; @@ -69,12 +70,13 @@ uint8_t *db_search (uint8_t **p, uint8_t *data) return NULL; } -uint8_t *db_insert (uint8_t **p, uint8_t *data) +uint8_t * +db_insert(uint8_t **p, uint8_t *data) { - if _0_(CBIT(data)) + if (_0_(CBIT(data))) return NULL; - if _0_(!*p) { + if (_0_(!*p)) { *p = data; return data; } @@ -89,31 +91,31 @@ uint8_t *db_insert (uint8_t **p, uint8_t *data) const size_t diff = db_cmp(r, data); - if _0_(!diff) + if (_0_(!diff)) return r; - const size_t pos = diff-1; - const uint8_t mask = ~((1u<<31)>>CLZ(r[pos]^data[pos])); - const size_t point = (pos<<8)|mask; + const size_t pos = diff - 1; + const uint8_t mask = ~((1u << 31) >> CLZ(r[pos] ^ data[pos])); + const size_t point = (pos << 8) | mask; while (CBIT(*p)) { struct node *node = CBIT_NODE(*p); - if (node->point>point) + if (node->point > point) break; - p = node->child+db_dir(node->point, data, size); + p = node->child + db_dir(node->point, data, size); } struct node *node = malloc(sizeof(struct node)); - if _0_(!node) + if (_0_(!node)) return NULL; - const int dir = (mask|r[pos])==255; + const int dir = (mask | r[pos]) == 255; node->child[dir] = *p; - node->child[1-dir] = data; + node->child[1 - dir] = data; node->point = point; *p = CBIT_PTR(node); @@ -121,9 +123,10 @@ uint8_t *db_insert (uint8_t **p, uint8_t *data) return data; } -uint8_t *db_remove (uint8_t **p, uint8_t *data) +uint8_t * +db_remove(uint8_t **p, uint8_t *data) { - if _0_(!*p) + if (_0_(!*p)) return NULL; const size_t size = db_size(data); @@ -136,16 +139,16 @@ uint8_t *db_remove (uint8_t **p, uint8_t *data) p_old = p; node = CBIT_NODE(*p); dir = db_dir(node->point, data, size); - p = node->child+dir; + p = node->child + dir; } - if _0_(db_cmp(data, *p)) + if (_0_(db_cmp(data, *p))) return NULL; uint8_t *r = *p; if (p_old) { - *p_old = node->child[1-dir]; + *p_old = node->child[1 - dir]; free(node); } else { *p = NULL; diff --git a/src/main.c b/src/main.c index a1acbb7..2c11e00 100644 --- a/src/main.c +++ b/src/main.c @@ -1,19 +1,19 @@ #include "common.h" #include "buffer.h" -#include "ip.h" -#include "str.h" -#include "option.h" -#include "tun.h" #include "db.h" +#include "ip.h" +#include "option.h" #include "state.h" +#include "str.h" +#include "tun.h" +#include #include #include -#include -#include #include -#include +#include +#include #include #include @@ -33,25 +33,27 @@ static struct { int state_fd; } gt; -static void fd_set_nonblock (int fd) +static void +fd_set_nonblock(int fd) { int ret; do { ret = fcntl(fd, F_GETFL, 0); - } while (ret==-1 && errno==EINTR); + } while (ret == -1 && errno == EINTR); - int flags = (ret==-1)?0:ret; + int flags = (ret == -1) ? 0 : ret; do { - ret = fcntl(fd, F_SETFL, flags|O_NONBLOCK); - } while (ret==-1 && errno==EINTR); + ret = fcntl(fd, F_SETFL, flags | O_NONBLOCK); + } while (ret == -1 && errno == EINTR); - if (ret==-1) + if (ret == -1) perror("fcntl O_NONBLOCK"); } -static void gt_sa_handler (int sig) +static void +gt_sa_handler(int sig) { switch (sig) { case SIGINT: @@ -65,7 +67,8 @@ static void gt_sa_handler (int sig) } } -static void gt_set_signal (void) +static void +gt_set_signal(void) { struct sigaction sa = { .sa_flags = 0, @@ -74,25 +77,26 @@ static void gt_set_signal (void) sigemptyset(&sa.sa_mask); sa.sa_handler = gt_sa_handler; - sigaction(SIGINT, &sa, NULL); + sigaction(SIGINT, &sa, NULL); sigaction(SIGQUIT, &sa, NULL); sigaction(SIGTERM, &sa, NULL); sigaction(SIGUSR1, &sa, NULL); sa.sa_handler = SIG_IGN; - sigaction(SIGHUP, &sa, NULL); + sigaction(SIGHUP, &sa, NULL); sigaction(SIGPIPE, &sa, NULL); } -static ssize_t fd_read (int fd, void *data, size_t size) +static ssize_t +fd_read(int fd, void *data, size_t size) { - if ((fd==-1) || !size) + if ((fd == -1) || !size) return -1; ssize_t ret = read(fd, data, size); - if (ret==-1) { - if (errno==EAGAIN || errno==EINTR) + if (ret == -1) { + if (errno == EAGAIN || errno == EINTR) return -1; if (errno) @@ -104,18 +108,19 @@ static ssize_t fd_read (int fd, void *data, size_t size) return ret; } -static ssize_t fd_write (int fd, const void *data, size_t size) +static ssize_t +fd_write(int fd, const void *data, size_t size) { - if ((fd==-1) || !size) + if ((fd == -1) || !size) return -1; ssize_t ret = write(fd, data, size); - if (ret==-1) { - if (errno==EAGAIN || errno==EINTR) + if (ret == -1) { + if (errno == EAGAIN || errno == EINTR) return -1; - if (errno==EPIPE || errno==ECONNRESET) + if (errno == EPIPE || errno == ECONNRESET) return 0; if (errno) @@ -127,17 +132,18 @@ static ssize_t fd_write (int fd, const void *data, size_t size) return ret; } -static size_t fd_read_all (int fd, void *data, size_t size) +static size_t +fd_read_all(int fd, void *data, size_t size) { size_t done = 0; - while (doneINT_MAX) { + if (gt.timeout <= 0 || gt.timeout > INT_MAX) { gt_log("bad timeout\n"); return 1; } @@ -317,25 +328,25 @@ int main (int argc, char **argv) if (v4) { icmp_fd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); - if (icmp_fd==-1) + if (icmp_fd == -1) gt_log("couldn't create ICMP socket\n"); } gt.state_fd = state_create(statefile); - if (statefile && gt.state_fd==-1) + if (statefile && gt.state_fd == -1) return 1; char *tun_name = NULL; int tun_fd = tun_create(dev, &tun_name); - if (tun_fd==-1) { + if (tun_fd == -1) { gt_log("couldn't create tun device\n"); return 1; } - if (tun_set_mtu(tun_name, mtu)==-1) { + if (tun_set_mtu(tun_name, mtu) == -1) { perror("tun_set_mtu"); return 1; } @@ -371,12 +382,12 @@ int main (int argc, char **argv) char tmp[1024]; char *name = &tmp[0]; - str_cpy(tmp, bind_list, sizeof(tmp)-1); + str_cpy(tmp, bind_list, sizeof(tmp) - 1); while (*name) { char *p = name; - while (*p && *p!=',') + while (*p && *p != ',') p++; if (*p) @@ -401,35 +412,36 @@ int main (int argc, char **argv) fd_set rfds; FD_ZERO(&rfds); - unsigned char buf[8*1024]; + unsigned char buf[8 * 1024]; while (!gt.quit) { FD_SET(tun_fd, &rfds); FD_SET(mud_fd, &rfds); - if (icmp_fd!=-1) + if (icmp_fd != -1) FD_SET(icmp_fd, &rfds); - if _0_(select(mud_fd+1, &rfds, NULL, NULL, NULL)==-1) { - if (errno==EINTR) + if (select(mud_fd + 1, &rfds, NULL, NULL, NULL) == -1) { + if (errno == EINTR) continue; perror("select"); return 1; } - if (icmp_fd!=-1 && FD_ISSET(icmp_fd, &rfds)) { + if (icmp_fd != -1 && FD_ISSET(icmp_fd, &rfds)) { struct sockaddr_storage ss; socklen_t sl = sizeof(ss); - ssize_t r = recvfrom(icmp_fd, buf, sizeof(buf), 0, (struct sockaddr *)&ss, &sl); - if (r>=8) { + ssize_t r = recvfrom(icmp_fd, buf, sizeof(buf), 0, + (struct sockaddr *)&ss, &sl); + if (r >= 8) { struct ip_common ic; - if (!ip_get_common(&ic, buf, r) && ic.proto==1) { + if (!ip_get_common(&ic, buf, r) && ic.proto == 1) { unsigned char *data = &buf[ic.hdr_size]; - if (data[0]==3) { - int new_mtu = (data[6]<<8)|data[7]; + if (data[0] == 3) { + int new_mtu = (data[6] << 8) | data[7]; if (new_mtu) { gt_log("received MTU from ICMP: %i\n", new_mtu); - mud_set_mtu(mud, new_mtu-50); // XXX + mud_set_mtu(mud, new_mtu - 50); // XXX } } } @@ -439,15 +451,15 @@ int main (int argc, char **argv) if (FD_ISSET(tun_fd, &rfds)) { size_t size = 0; - while (sizeof(buf)-size>mtu) { - const ssize_t r = tun_read(tun_fd, &buf[size], sizeof(buf)-size); - - if (r<=0) + while (sizeof(buf) - size > mtu) { + const ssize_t r = tun_read(tun_fd, &buf[size], + sizeof(buf) - size); + if (r <= 0) break; struct ip_common ic; - if (ip_get_common(&ic, &buf[size], r) || ic.size!=r) + if (ip_get_common(&ic, &buf[size], r) || ic.size != r) break; size += r; @@ -455,42 +467,43 @@ int main (int argc, char **argv) int p = 0; - while (psize-q) { + if ((ip_get_common(&ic, &buf[q], size - q)) || + (ic.size > size - q)) { size = q; break; } - if (q+ic.size>p+mtu) + if (q + ic.size > p + mtu) break; q += ic.size; - if (tc<(ic.tc&0xFC)) - tc = ic.tc&0xFC; + if (tc < (ic.tc & 0xFC)) + tc = ic.tc & 0xFC; } - int r = mud_send(mud, &buf[p], q-p, tc); + int r = mud_send(mud, &buf[p], q - p, tc); - if (r==-1 && errno==EMSGSIZE) { + if (r == -1 && errno == EMSGSIZE) { int new_mtu = mud_get_mtu(mud); - if (new_mtu!=mtu) { + if (new_mtu != mtu) { mtu = new_mtu; gt_log("MTU changed: %li\n", mtu); - if (tun_set_mtu(tun_name, mtu)==-1) + if (tun_set_mtu(tun_name, mtu) == -1) perror("tun_set_mtu"); } } else { - if (r==-1 && errno!=EAGAIN) + if (r == -1 && errno != EAGAIN) perror("mud_send"); p = q; @@ -502,18 +515,19 @@ int main (int argc, char **argv) while (1) { const int size = mud_recv(mud, buf, sizeof(buf)); - if (size<=0) { - if (size==-1 && errno!=EAGAIN) + if (size <= 0) { + if (size == -1 && errno != EAGAIN) perror("mud_recv"); break; } int p = 0; - while (psize-p) + if ((ip_get_common(&ic, &buf[p], size - p)) || + (ic.size > size - p)) break; tun_write(tun_fd, &buf[p], ic.size); diff --git a/src/option.c b/src/option.c index 3609f47..f2fc81b 100644 --- a/src/option.c +++ b/src/option.c @@ -3,9 +3,10 @@ #include "option.h" #include "str.h" -int option_str (void *data, int argc, char **argv) +int +option_str(void *data, int argc, char **argv) { - if (argc<2 || str_empty(argv[1])) { + if (argc < 2 || str_empty(argv[1])) { gt_print("option `%s' need a string argument\n", argv[0]); return -1; } @@ -15,9 +16,10 @@ int option_str (void *data, int argc, char **argv) return 1; } -int option_long (void *data, int argc, char **argv) +int +option_long(void *data, int argc, char **argv) { - if (argc<2 || str_empty(argv[1])) { + if (argc < 2 || str_empty(argv[1])) { gt_print("option `%s' need an integer argument\n", argv[0]); return -1; } @@ -26,7 +28,7 @@ int option_long (void *data, int argc, char **argv) char *end; long val = strtol(argv[1], &end, 0); - if (errno || argv[1]==end) { + if (errno || argv[1] == end) { gt_print("argument `%s' is not a valid integer\n", argv[1]); return -1; } @@ -36,9 +38,10 @@ int option_long (void *data, int argc, char **argv) return 1; } -int option_is_set (struct option *opts, const char *name) +int +option_is_set(struct option *opts, const char *name) { - for (int k=0; opts[k].name; k++) { + for (int k = 0; opts[k].name; k++) { if (!str_cmp(opts[k].name, name)) return opts[k].set; } @@ -46,20 +49,21 @@ int option_is_set (struct option *opts, const char *name) return 0; } -int option_option (void *data, int argc, char **argv) +int +option_option(void *data, int argc, char **argv) { if (!data) return 0; struct option *opts = (struct option *)data; - for (int k=0; opts[k].name; k++) + for (int k = 0; opts[k].name; k++) opts[k].set = 0; - for (int i=1; i40) { + for (int k = 0; opts[k].name; k++) { + if (len > 40) { gt_print("\n%*s", slen, ""); len = 0; } len += gt_print(" [%s", opts[k].name); - if (opts[k].call==option_option) { - len += option_usage((struct option *)opts[k].data, slen+len); + if (opts[k].call == option_option) { + len += option_usage((struct option *)opts[k].data, slen + len); } else { len += gt_print(" ARG"); } @@ -114,21 +119,22 @@ static int option_usage (struct option *opts, int slen) return len; } -int option (struct option *opts, int argc, char **argv) +int +option(struct option *opts, int argc, char **argv) { int ret = option_option(opts, argc, argv); - if (ret==argc) + if (ret == argc) return 0; - if (ret<0 || ret+1>=argc) + if (ret < 0 || ret + 1 >= argc) return 1; - gt_print("option `%s' is unknown\n", argv[ret+1]); + gt_print("option `%s' is unknown\n", argv[ret + 1]); int slen = gt_print("usage: %s", argv[0]); - if (slen>40) { + if (slen > 40) { slen = 12; gt_print("\n%*s", slen, ""); } diff --git a/src/state.c b/src/state.c index 347f59b..ea9609b 100644 --- a/src/state.c +++ b/src/state.c @@ -3,26 +3,27 @@ #include "state.h" #include "str.h" -#include #include +#include #include -int state_create (const char *filename) +int +state_create(const char *filename) { if (str_empty(filename)) return -1; int fd = open(filename, O_WRONLY); - if (fd==-1) { - if (errno!=EINTR) + if (fd == -1) { + if (errno != EINTR) perror("open"); return -1; } struct stat st = {0}; - if (fstat(fd, &st)==-1) { + if (fstat(fd, &st) == -1) { perror("fstat"); close(fd); return -1; @@ -37,17 +38,18 @@ int state_create (const char *filename) return fd; } -void state_send (int fd, const char *state, const char *info) +void +state_send(int fd, const char *state, const char *info) { if (str_empty(state)) return; - if (fd==-1) { + if (fd == -1) { gt_print("%s %s\n", state, info); return; } - const char *strs[] = { state, " ", info, "\n" }; + const char *strs[] = {state, " ", info, "\n"}; char *str = str_cat(strs, COUNT(strs)); if (!str) { @@ -55,7 +57,7 @@ void state_send (int fd, const char *state, const char *info) return; } - if (write(fd, str, str_len(str))==-1 && errno!=EINTR) + if (write(fd, str, str_len(str)) == -1 && errno != EINTR) perror("write"); free(str); diff --git a/src/tun.c b/src/tun.c index 5e4b1fc..3823190 100644 --- a/src/tun.c +++ b/src/tun.c @@ -1,11 +1,11 @@ #include "common.h" -#include "tun.h" -#include "str.h" #include "ip.h" +#include "str.h" +#include "tun.h" -#include #include +#include #include #include @@ -18,9 +18,9 @@ #endif #ifdef __APPLE__ -#include -#include #include +#include +#include #endif #if defined(__APPLE__) || defined(__OpenBSD__) @@ -29,17 +29,18 @@ #ifdef __APPLE__ -static int tun_create_by_id (char *name, size_t size, unsigned id) +static int +tun_create_by_id(char *name, size_t size, unsigned id) { int fd = socket(PF_SYSTEM, SOCK_DGRAM, SYSPROTO_CONTROL); - if (fd==-1) + if (fd == -1) return -1; struct ctl_info ci; memset(&ci, 0, sizeof(ci)); - str_cpy(ci.ctl_name, UTUN_CONTROL_NAME, sizeof(ci.ctl_name)-1); + str_cpy(ci.ctl_name, UTUN_CONTROL_NAME, sizeof(ci.ctl_name) - 1); if (ioctl(fd, CTLIOCGINFO, &ci)) { close(fd); @@ -51,7 +52,7 @@ static int tun_create_by_id (char *name, size_t size, unsigned id) .sc_len = sizeof(sc), .sc_family = AF_SYSTEM, .ss_sysaddr = AF_SYS_CONTROL, - .sc_unit = id+1, + .sc_unit = id + 1, }; if (connect(fd, (struct sockaddr *)&sc, sizeof(sc))) { @@ -64,11 +65,12 @@ static int tun_create_by_id (char *name, size_t size, unsigned id) return fd; } -static int tun_create_by_name (char *name, size_t size, char *dev_name) +static int +tun_create_by_name(char *name, size_t size, char *dev_name) { unsigned id = 0; - if (sscanf(dev_name, "utun%u", &id)!=1) + if (sscanf(dev_name, "utun%u", &id) != 1) return -1; return tun_create_by_id(name, size, id); @@ -78,44 +80,47 @@ static int tun_create_by_name (char *name, size_t size, char *dev_name) #ifdef __linux__ -static int tun_create_by_name (char *name, size_t size, char *dev_name) +static int +tun_create_by_name(char *name, size_t size, char *dev_name) { int fd = open("/dev/net/tun", O_RDWR); - if (fd==-1) + if (fd == -1) return -1; struct ifreq ifr = { - .ifr_flags = IFF_TUN|IFF_NO_PI, + .ifr_flags = IFF_TUN | IFF_NO_PI, }; - str_cpy(ifr.ifr_name, dev_name, IFNAMSIZ-1); + str_cpy(ifr.ifr_name, dev_name, IFNAMSIZ - 1); if (ioctl(fd, TUNSETIFF, &ifr)) { close(fd); return -1; } - str_cpy(name, ifr.ifr_name, size-1); + str_cpy(name, ifr.ifr_name, size - 1); return fd; } #else /* not __linux__ not __APPLE__ */ -static int tun_create_by_name (char *name, size_t size, char *dev_name) +static int +tun_create_by_name(char *name, size_t size, char *dev_name) { char path[64]; snprintf(path, sizeof(path), "/dev/%s", dev_name); - str_cpy(name, dev_name, size-1); + str_cpy(name, dev_name, size - 1); return open(path, O_RDWR); } #endif /* not __APPLE__ */ -static int tun_create_by_id (char *name, size_t size, unsigned id) +static int +tun_create_by_id(char *name, size_t size, unsigned id) { char dev_name[64]; @@ -126,25 +131,27 @@ static int tun_create_by_id (char *name, size_t size, unsigned id) #endif -int tun_create (char *dev_name, char **ret_name) +int +tun_create(char *dev_name, char **ret_name) { char name[64] = {0}; int fd = -1; if (str_empty(dev_name)) { - for (unsigned id=0; id<32 && fd==-1; id++) + for (unsigned id = 0; id < 32 && fd == -1; id++) fd = tun_create_by_id(name, sizeof(name), id); } else { fd = tun_create_by_name(name, sizeof(name), dev_name); } - if (fd!=-1 && ret_name) + if (fd != -1 && ret_name) *ret_name = strdup(name); return fd; } -ssize_t tun_read (int fd, void *data, size_t size) +ssize_t +tun_read(int fd, void *data, size_t size) { if (!size) return -1; @@ -153,8 +160,14 @@ ssize_t tun_read (int fd, void *data, size_t size) uint32_t family; struct iovec iov[2] = { - { .iov_base = &family, .iov_len = sizeof(family) }, - { .iov_base = data, .iov_len = size } + { + .iov_base = &family, + .iov_len = sizeof(family), + }, + { + .iov_base = data, + .iov_len = size, + }, }; ssize_t ret = readv(fd, iov, 2); @@ -162,8 +175,8 @@ ssize_t tun_read (int fd, void *data, size_t size) ssize_t ret = read(fd, data, size); #endif - if (ret==-1) { - if (errno==EAGAIN || errno==EINTR) + if (ret == -1) { + if (errno == EAGAIN || errno == EINTR) return -1; if (errno) @@ -173,16 +186,17 @@ ssize_t tun_read (int fd, void *data, size_t size) } #ifdef GT_BSD_TUN - if (ret<(ssize_t) sizeof(family)) + if (ret < (ssize_t)sizeof(family)) return 0; - return ret-sizeof(family); + return ret - sizeof(family); #else return ret; #endif } -ssize_t tun_write (int fd, const void *data, size_t size) +ssize_t +tun_write(int fd, const void *data, size_t size) { if (!size) return -1; @@ -202,8 +216,14 @@ ssize_t tun_write (int fd, const void *data, size_t size) } struct iovec iov[2] = { - { .iov_base = &family, .iov_len = sizeof(family) }, - { .iov_base = (void *) data, .iov_len = size }, + { + .iov_base = &family, + .iov_len = sizeof(family), + }, + { + .iov_base = (void *)data, + .iov_len = size, + }, }; ssize_t ret = writev(fd, iov, 2); @@ -211,8 +231,8 @@ ssize_t tun_write (int fd, const void *data, size_t size) ssize_t ret = write(fd, data, size); #endif - if (ret==-1) { - if (errno==EAGAIN || errno==EINTR) + if (ret == -1) { + if (errno == EAGAIN || errno == EINTR) return -1; if (errno) @@ -222,26 +242,27 @@ ssize_t tun_write (int fd, const void *data, size_t size) } #ifdef GT_BSD_TUN - if (ret<(ssize_t) sizeof(family)) + if (ret < (ssize_t)sizeof(family)) return 0; - return ret-sizeof(family); + return ret - sizeof(family); #else return ret; #endif } -int tun_set_mtu (char *dev_name, int mtu) +int +tun_set_mtu(char *dev_name, int mtu) { struct ifreq ifr = { .ifr_mtu = mtu, }; - str_cpy(ifr.ifr_name, dev_name, IFNAMSIZ-1); + str_cpy(ifr.ifr_name, dev_name, IFNAMSIZ - 1); int fd = socket(AF_INET, SOCK_DGRAM, 0); - if (fd==-1) + if (fd == -1) return -1; int ret = ioctl(fd, SIOCSIFMTU, &ifr);