diff options
author | 1997-07-13 23:29:00 +0000 | |
---|---|---|
committer | 1997-07-13 23:29:00 +0000 | |
commit | d352ec005165fae37dfd9b05fcd83f17308df624 (patch) | |
tree | aa6249d72352f0f5258a3f9bac5fc1e893728ca3 | |
parent | Simplified use. (diff) | |
download | wireguard-openbsd-d352ec005165fae37dfd9b05fcd83f17308df624.tar.xz wireguard-openbsd-d352ec005165fae37dfd9b05fcd83f17308df624.zip |
Cleanup, made argument order a bit more sane.
-rw-r--r-- | sbin/ipsec/rt/rt.c | 146 |
1 files changed, 61 insertions, 85 deletions
diff --git a/sbin/ipsec/rt/rt.c b/sbin/ipsec/rt/rt.c index b3990593ce9..49da1de4de1 100644 --- a/sbin/ipsec/rt/rt.c +++ b/sbin/ipsec/rt/rt.c @@ -47,104 +47,80 @@ #include <paths.h> - -#define SENO_EOL 0x00 /* End of Options, or placeholder */ -#define SENO_NOP 0x01 /* No Operation. Skip */ -#define SENO_NAME 0x02 /* tunnel name, NUL-terminated */ -#define SENO_TDB 0x03 /* tunnel descriptor block address */ -#define SENO_IFN 0x04 /* Encap interface number */ -#define SENO_IFIP4A 0x05 /* Encap interface IPv4 address */ -#define SENO_IPSA 0x06 /* Encap interface generic sockaddr */ - - -#define IFT_ENC 0x37 #define INET - - #include "net/encap.h" -/* - * The numbers below are arbitrary. They have been chosen for their - * mnemonic value. If sen_len is larger than what would be expected from - * the length of the data that follow, then TLV-triplets follow the - * addresses containing system-depended information. - */ - - char buf[2048]; -main(argc, argv) -int argc; -char **argv; +main(int argc, char **argv) { - int sd; + struct sockaddr_encap *dst, *msk, *gw; + struct rt_msghdr *rtm; + int sd; - struct rt_msghdr *rtm; - struct sockaddr_encap *dst, *msk, *gw; - u_char *opts; - - if (argc != 11) - fprintf(stderr, "usage: %s isrc isrcmask idst idstmask odst spi fespah proto sport dport\n", argv[0]), exit(1); + if (argc != 11) + fprintf(stderr, "usage: %s isrc isrcmask idst idstmask tproto sport dport raddr spi fespah\n", argv[0]), exit(1); - sd = socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC); - if (sd < 0) - perror("socket"), exit(1); + sd = socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC); + if (sd < 0) + perror("socket"), exit(1); - rtm = (struct rt_msghdr *)(&buf[0]); - dst = (struct sockaddr_encap *)(&buf[sizeof (*rtm)]); - gw = (struct sockaddr_encap *)(&buf[sizeof (*rtm) + SENT_IP4_LEN]); - msk = (struct sockaddr_encap *)(&buf[sizeof (*rtm) + SENT_IP4_LEN + SENT_IPSP_LEN]); + rtm = (struct rt_msghdr *)(&buf[0]); + dst = (struct sockaddr_encap *) (&buf[sizeof (*rtm)]); + gw = (struct sockaddr_encap *) (&buf[sizeof (*rtm) + SENT_IP4_LEN]); + msk = (struct sockaddr_encap *) (&buf[sizeof (*rtm) + SENT_IP4_LEN + + SENT_IPSP_LEN]); - rtm->rtm_version = RTM_VERSION; - rtm->rtm_type = RTM_ADD; - rtm->rtm_index = 0; - rtm->rtm_pid = getpid(); - rtm->rtm_addrs = RTA_DST | RTA_GATEWAY | RTA_NETMASK /* | RTA_IFP */; - rtm->rtm_errno = 0; - rtm->rtm_flags = RTF_UP | RTF_GATEWAY | RTF_STATIC; - rtm->rtm_inits = 0; + rtm->rtm_version = RTM_VERSION; + rtm->rtm_type = RTM_ADD; + rtm->rtm_index = 0; + rtm->rtm_pid = getpid(); + rtm->rtm_addrs = RTA_DST | RTA_GATEWAY | RTA_NETMASK /* | RTA_IFP */; + rtm->rtm_errno = 0; + rtm->rtm_flags = RTF_UP | RTF_GATEWAY | RTF_STATIC; + rtm->rtm_inits = 0; - dst->sen_len = SENT_IP4_LEN; - dst->sen_family = AF_ENCAP; - dst->sen_type = SENT_IP4; - dst->sen_ip_src.s_addr = inet_addr(argv[1]); - dst->sen_ip_dst.s_addr = inet_addr(argv[3]); - dst->sen_proto = dst->sen_sport = dst->sen_dport = 0; - - if (atoi(argv[8]) >= 0) + dst->sen_len = SENT_IP4_LEN; + dst->sen_family = AF_ENCAP; + dst->sen_type = SENT_IP4; + dst->sen_ip_src.s_addr = inet_addr(argv[1]); + dst->sen_ip_dst.s_addr = inet_addr(argv[3]); + dst->sen_proto = dst->sen_sport = dst->sen_dport = 0; + + if (atoi(argv[5]) > 0) + { + dst->sen_proto = atoi(argv[5]); + msk->sen_proto = 0xff; + + if (atoi(argv[6]) > 0) { - dst->sen_proto = atoi(argv[8]); - msk->sen_proto = 0xff; - if (atoi(argv[9]) >= 0) - { - dst->sen_sport = atoi(argv[9]); - msk->sen_sport = 0xffff; - } - if (atoi(argv[10]) >= 0) - { - dst->sen_dport = atoi(argv[10]); - msk->sen_dport = 0xffff; - } + dst->sen_sport = atoi(argv[6]); + msk->sen_sport = 0xffff; } - gw->sen_len = SENT_IPSP_LEN; - gw->sen_family = AF_ENCAP; - gw->sen_type = SENT_IPSP; - gw->sen_ipsp_dst.s_addr = inet_addr(argv[5]); - gw->sen_ipsp_spi = htonl(strtoul(argv[6], NULL, 16)); - gw->sen_ipsp_sproto = atoi(argv[7]) == 1 ? IPPROTO_ESP : IPPROTO_AH; - - msk->sen_len = SENT_IP4_LEN; - msk->sen_family = AF_ENCAP; - msk->sen_type = SENT_IP4; - msk->sen_ip_src.s_addr = inet_addr(argv[2]); - msk->sen_ip_dst.s_addr = inet_addr(argv[4]); - - rtm->rtm_msglen = sizeof (*rtm) + dst->sen_len + gw->sen_len + msk->sen_len; + if (atoi(argv[7]) > 0) + { + dst->sen_dport = atoi(argv[7]); + msk->sen_dport = 0xffff; + } + } + + gw->sen_len = SENT_IPSP_LEN; + gw->sen_family = AF_ENCAP; + gw->sen_type = SENT_IPSP; + gw->sen_ipsp_dst.s_addr = inet_addr(argv[8]); + gw->sen_ipsp_spi = htonl(strtoul(argv[9], NULL, 16)); + gw->sen_ipsp_sproto = atoi(argv[10]) == 1 ? IPPROTO_ESP : IPPROTO_AH; + + msk->sen_len = SENT_IP4_LEN; + msk->sen_family = AF_ENCAP; + msk->sen_type = SENT_IP4; + msk->sen_ip_src.s_addr = inet_addr(argv[2]); + msk->sen_ip_dst.s_addr = inet_addr(argv[4]); + + rtm->rtm_msglen = sizeof(*rtm) + dst->sen_len + gw->sen_len + + msk->sen_len; - if (write(sd, (caddr_t)buf, rtm->rtm_msglen) < 0) - perror("write"); + if (write(sd, (caddr_t) buf, rtm->rtm_msglen) < 0) + perror("write"); } - - - |