diff options
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/irm/irm_ipcp_bootstrap.c | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/src/tools/irm/irm_ipcp_bootstrap.c b/src/tools/irm/irm_ipcp_bootstrap.c index 986c45e1..9a0a30ec 100644 --- a/src/tools/irm/irm_ipcp_bootstrap.c +++ b/src/tools/irm/irm_ipcp_bootstrap.c @@ -51,6 +51,7 @@ #define NORMAL "normal" #define UDP "udp" #define ETH_LLC "eth-llc" +#define ETH_DIX "eth-dix" #define LOCAL "local" #define RAPTOR "raptor" @@ -68,6 +69,8 @@ #define DEFAULT_ROUTING ROUTING_LINK_STATE #define DEFAULT_PFF PFF_SIMPLE #define DEFAULT_HASH_ALGO DIR_HASH_SHA3_256 +#define DEFAULT_ETHERTYPE 0xA000 + #define FLAT_RANDOM_ADDR_AUTH "flat" #define LINK_STATE_ROUTING "link_state" #define LINK_STATE_LFA_ROUTING "lfa" @@ -82,7 +85,7 @@ static void usage(void) " layer <layer name>\n" " type [TYPE]\n" "where TYPE = {" NORMAL " " LOCAL " " - UDP " " ETH_LLC " " RAPTOR "},\n\n" + UDP " " ETH_LLC " " ETH_DIX " " RAPTOR "},\n\n" "if TYPE == " NORMAL "\n" " [addr <address size> (default: %d)]\n" " [eid <eid size> (default: %d)]\n" @@ -103,7 +106,13 @@ static void usage(void) " [dns <DDNS IP address in dotted notation>" " (default: none)]\n\n" "if TYPE == " ETH_LLC "\n" - " if_name <interface name>\n" + " dev <interface name>\n" + " [hash [ALGORITHM] (default: %s)]\n" + "where ALGORITHM = {" SHA3_224 " " SHA3_256 " " + SHA3_384 " " SHA3_512 "}\n\n" + "if TYPE == " ETH_DIX "\n" + " dev <interface name>\n" + " [ethertype <ethertype> (default: 0x%4X)]\n" " [hash [ALGORITHM] (default: %s)]\n" "where ALGORITHM = {" SHA3_224 " " SHA3_256 " " SHA3_384 " " SHA3_512 "}\n\n" @@ -117,7 +126,7 @@ static void usage(void) SHA3_384 " " SHA3_512 "}\n\n", DEFAULT_ADDR_SIZE, DEFAULT_EID_SIZE, DEFAULT_TTL, FLAT_RANDOM_ADDR_AUTH, LINK_STATE_ROUTING, SIMPLE_PFF, - SHA3_256, SHA3_256, SHA3_256, SHA3_256); + SHA3_256, SHA3_256, 0xA000, SHA3_256, SHA3_256, SHA3_256); } int do_bootstrap_ipcp(int argc, @@ -137,7 +146,8 @@ int do_bootstrap_ipcp(int argc, uint32_t dns_addr = DEFAULT_DDNS; char * ipcp_type = NULL; char * layer_name = NULL; - char * if_name = NULL; + char * dev = NULL; + uint16_t ethertype = DEFAULT_ETHERTYPE; pid_t * pids = NULL; ssize_t len = 0; int i = 0; @@ -169,8 +179,14 @@ int do_bootstrap_ipcp(int argc, } else if (matches(*argv, "dns") == 0) { if (inet_pton(AF_INET, *(argv + 1), &dns_addr) != 1) goto unknown_param; - } else if (matches(*argv, "if_name") == 0) { - if_name = *(argv + 1); + } else if (matches(*argv, "device") == 0) { + dev = *(argv + 1); + } else if (matches(*argv, "ethertype") == 0) { + /* NOTE: We might do some checks on this. */ + if (matches(*(argv + 1), "0x") == 0) + ethertype = strtol(*(argv + 1), NULL, 0); + else + ethertype = strtol(*(argv + 1), NULL, 16); } else if (matches(*argv, "addr") == 0) { addr_size = atoi(*(argv + 1)); } else if (matches(*argv, "eid") == 0) { @@ -240,11 +256,19 @@ int do_bootstrap_ipcp(int argc, conf.type = IPCP_RAPTOR; } else if (strcmp(ipcp_type, ETH_LLC) == 0) { conf.type = IPCP_ETH_LLC; - if (if_name == NULL) { + if (dev == NULL) { + usage(); + return -1; + } + conf.dev = dev; + } else if (strcmp(ipcp_type, ETH_DIX) == 0) { + conf.type = IPCP_ETH_DIX; + if (dev == NULL) { usage(); return -1; } - conf.if_name = if_name; + conf.dev = dev; + conf.ethertype = ethertype; } else { usage(); return -1; |