" $DNSDOM - space-separated list of DNS search domain names\n"\
" $IPADDR - space-separated list of assigned IP addresses\n"\
" $PREFIX - space-separated list of assigned prefixes\n"\
+ " $DHCPSRV - the address of the DHCPv6 server that responded\n"\
"\n"\
"TDHCP client options:\n" \
" -h | --help\n" \
/*maximum amount of any item that we can handle: 16 is sensitive for addresses, prefixes and DNS settings*/
#define MAXITEMS 16
-static struct in6_addr addresses[MAXITEMS], prefixes[MAXITEMS], dnsservers[MAXITEMS];
+static struct in6_addr addresses[MAXITEMS], prefixes[MAXITEMS], dnsservers[MAXITEMS], dhcpserver;
static char **dnsnames;
static unsigned char prefixlens[MAXITEMS];
static struct in6_addr NULLADDR;
/*find PREFIX info*/
if(getprefix){
p=messagefindoption(rmsg,OPT_IAPD);
+ if(p>=0)
for(i=0;i<rmsg->msg_opt[p].opt_numopts;i++)
if(rmsg->msg_opt[p].subopt[i].opt_type==OPT_IAPREFIX){
j=addaddr(prefixes,rmsg->msg_opt[p].subopt[i].opt_iaprefix.prefix);
/*find IANA info*/
if(getaddress){
p=messagefindoption(rmsg,OPT_IANA);
+ if(p>=0)
for(i=0;i<rmsg->msg_opt[p].opt_numopts;i++)
if(rmsg->msg_opt[p].subopt[i].opt_type==OPT_IAADDR)
addaddr(addresses,rmsg->msg_opt[p].subopt[i].opt_iaaddress.addr);
}
+ /*copy server address*/
+ memcpy(&dhcpserver,&rmsg->msg_peer.sin6_addr,16);
/*check for rapid commit or type=REPLY; if so: tell caller it can stop now*/
if(rmsg->msg_type==MSG_REPLY)return 0;
if(messagefindoption(rmsg,OPT_RAPIDCOMMIT)>=0)return 0;
strncat(buf,dnsnames[i],sizeof(buf));
}
if(buf[0])setenv("DNSDOM",buf,1);
+ /*dhcp server addr*/
+ setenv("DHCPSRV",inet_ntop(AF_INET6,&dhcpserver,tmp,sizeof(tmp)),1);
/*call*/
return system(script)!=0;
}