mirror of
https://github.com/markqvist/tncattach.git
synced 2025-08-04 14:52:26 -04:00
tncattach
- Now parse IPv6 address and prefix in opt-args TAP - Removed parsing from here
This commit is contained in:
parent
3227ed232b
commit
05bc0ae6ad
20
TAP.c
20
TAP.c
@ -14,6 +14,7 @@ extern int device_type;
|
|||||||
extern char if_name[IFNAMSIZ];
|
extern char if_name[IFNAMSIZ];
|
||||||
extern char* ipv4_addr;
|
extern char* ipv4_addr;
|
||||||
extern char* ipv6_addr;
|
extern char* ipv6_addr;
|
||||||
|
extern long ipv6_prefixLen;
|
||||||
extern char* netmask;
|
extern char* netmask;
|
||||||
extern void cleanup();
|
extern void cleanup();
|
||||||
|
|
||||||
@ -259,23 +260,6 @@ int open_tap(void) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* ipPart = strtok(ipv6_addr, "/");
|
|
||||||
char* prefixPart_s = strtok(NULL, "/");
|
|
||||||
printf("ip part: %s\n", ipPart);
|
|
||||||
|
|
||||||
if(!prefixPart_s)
|
|
||||||
{
|
|
||||||
printf("No prefix length was provided\n"); // TODO: Move logic into arg parsing
|
|
||||||
close(inet6);
|
|
||||||
cleanup();
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
printf("prefix part: %s\n", prefixPart_s);
|
|
||||||
|
|
||||||
long prefixLen_l = strtol(prefixPart_s, NULL, 10); // TODO: Add handling here for errors (using errno)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Convert ASCII IPv6 address to ABI structure
|
// Convert ASCII IPv6 address to ABI structure
|
||||||
struct in6_addr six_addr_itself;
|
struct in6_addr six_addr_itself;
|
||||||
memset(&six_addr_itself, 0, sizeof(struct in6_addr));
|
memset(&six_addr_itself, 0, sizeof(struct in6_addr));
|
||||||
@ -288,7 +272,7 @@ int open_tap(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add user's requested address
|
// Add user's requested address
|
||||||
trySixSet(ifr.ifr_ifindex, six_addr_itself, prefixLen_l);
|
trySixSet(ifr.ifr_ifindex, six_addr_itself, ipv6_prefixLen);
|
||||||
|
|
||||||
close(inet6);
|
close(inet6);
|
||||||
}
|
}
|
||||||
|
24
tncattach.c
24
tncattach.c
@ -41,6 +41,7 @@ char* ipv4_addr;
|
|||||||
char* netmask;
|
char* netmask;
|
||||||
|
|
||||||
char* ipv6_addr;
|
char* ipv6_addr;
|
||||||
|
long ipv6_prefixLen;
|
||||||
|
|
||||||
char* tcp_host;
|
char* tcp_host;
|
||||||
int tcp_port;
|
int tcp_port;
|
||||||
@ -488,13 +489,32 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
|||||||
perror("Sorry, but you had noipv6 set yet want to use ipv6?\n");
|
perror("Sorry, but you had noipv6 set yet want to use ipv6?\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
arguments->ipv6 = arg;
|
|
||||||
|
char* ipPart_s = strtok(arg, "/");
|
||||||
|
char* prefixPart_s = strtok(NULL, "/");
|
||||||
|
printf("ipPart_s: %s\n", ipPart_s);
|
||||||
|
|
||||||
|
if(!prefixPart_s)
|
||||||
|
{
|
||||||
|
printf("No prefix length was provided\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
printf("prefixPart_s: %s\n", prefixPart_s);
|
||||||
|
|
||||||
|
long prefixLen_l = strtol(prefixPart_s, NULL, 10); // TODO: Add handling here for errors (using errno)
|
||||||
|
|
||||||
|
|
||||||
|
arguments->ipv6 = ipPart_s;
|
||||||
|
|
||||||
arguments->set_ipv6 = true;
|
arguments->set_ipv6 = true;
|
||||||
|
|
||||||
// Save to the global for other modules to access it
|
// Copy across global IPv6 address
|
||||||
ipv6_addr = malloc(strlen(arguments->ipv6)+1);
|
ipv6_addr = malloc(strlen(arguments->ipv6)+1);
|
||||||
strcpy(ipv6_addr, arguments->ipv6);
|
strcpy(ipv6_addr, arguments->ipv6);
|
||||||
|
|
||||||
|
// Set global IPv6 prefix length
|
||||||
|
ipv6_prefixLen = prefixLen_l;
|
||||||
|
|
||||||
printf("MTU was %d, setting to minimum of %d as is required for IPv6\n", arguments->mtu, 1280);
|
printf("MTU was %d, setting to minimum of %d as is required for IPv6\n", arguments->mtu, 1280);
|
||||||
arguments->mtu = 1280;
|
arguments->mtu = 1280;
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user