ip/ipconfig: simplify by combining mklladdr() into mkclientid()

This commit is contained in:
cinap_lenrek 2018-08-12 22:39:44 +02:00
parent 9445f08788
commit ab4c0a012f
3 changed files with 31 additions and 48 deletions

View file

@ -121,7 +121,6 @@ void ipunconfig(void);
void adddefroute(uchar*, uchar*, uchar*, uchar*); void adddefroute(uchar*, uchar*, uchar*, uchar*);
void removedefroute(int, uchar*, uchar*); void removedefroute(int, uchar*, uchar*);
void mklladdr(void);
long jitter(void); long jitter(void);
void procsetname(char *fmt, ...); void procsetname(char *fmt, ...);
void catch(void*, char*); void catch(void*, char*);

View file

@ -1139,8 +1139,6 @@ startra6(void)
{ {
static char routeon[] = "iprouting 1"; static char routeon[] = "iprouting 1";
mklladdr();
if(conf.recvra > 0) if(conf.recvra > 0)
recvra6(); recvra6();

View file

@ -278,6 +278,32 @@ findifc(char *net, char *dev)
return -1; return -1;
} }
static int
isether(void)
{
return strcmp(conf.type, "ether") == 0 || strcmp(conf.type, "gbe") == 0;
}
/* create a client id */
static void
mkclientid(void)
{
if(isether() && myetheraddr(conf.hwa, conf.dev) == 0){
conf.hwalen = 6;
conf.hwatype = 1;
conf.cid[0] = conf.hwatype;
memmove(&conf.cid[1], conf.hwa, conf.hwalen);
conf.cidlen = conf.hwalen+1;
} else {
conf.hwatype = -1;
snprint((char*)conf.cid, sizeof conf.cid,
"plan9_%ld.%d", lrand(), getpid());
conf.cidlen = strlen((char*)conf.cid);
genrandom(conf.hwa, sizeof(conf.hwa));
}
ea2lla(conf.lladdr, conf.hwa);
}
void void
main(int argc, char **argv) main(int argc, char **argv)
{ {
@ -385,6 +411,7 @@ main(int argc, char **argv)
switch(action){ switch(action){
case Vadd: case Vadd:
mkclientid();
if(dondbconfig){ if(dondbconfig){
dodhcp = 0; dodhcp = 0;
ndbconfig(); ndbconfig();
@ -394,6 +421,7 @@ main(int argc, char **argv)
break; break;
case Vra6: case Vra6:
case Vaddpref6: case Vaddpref6:
mkclientid();
doipv6(action); doipv6(action);
break; break;
case Vremove: case Vremove:
@ -406,50 +434,11 @@ main(int argc, char **argv)
exits(nil); exits(nil);
} }
static int
isether(void)
{
return strcmp(conf.type, "ether") == 0 || strcmp(conf.type, "gbe") == 0;
}
/* create link local address */
void
mklladdr(void)
{
if(isether() && myetheraddr(conf.hwa, conf.dev) == 0){
conf.hwalen = 6;
conf.hwatype = 1;
} else {
genrandom(conf.hwa, sizeof(conf.hwa));
conf.hwatype = -1;
}
ea2lla(conf.lladdr, conf.hwa);
}
/* create a client id */
static void
mkclientid(void)
{
if(isether() && myetheraddr(conf.hwa, conf.dev) == 0){
conf.hwalen = 6;
conf.hwatype = 1;
conf.cid[0] = conf.hwatype;
memmove(&conf.cid[1], conf.hwa, conf.hwalen);
conf.cidlen = conf.hwalen+1;
} else {
conf.hwatype = -1;
snprint((char*)conf.cid, sizeof conf.cid,
"plan9_%ld.%d", lrand(), getpid());
conf.cidlen = strlen((char*)conf.cid);
}
}
static void static void
doadd(void) doadd(void)
{ {
if(!validip(conf.laddr)){ if(!validip(conf.laddr)){
if(ipv6auto){ if(ipv6auto){
mklladdr();
ipmove(conf.laddr, conf.lladdr); ipmove(conf.laddr, conf.lladdr);
dodhcp = 0; dodhcp = 0;
} else } else
@ -459,8 +448,6 @@ doadd(void)
/* run dhcp if we need something */ /* run dhcp if we need something */
if(dodhcp){ if(dodhcp){
fprint(conf.rfd, "tag dhcp"); fprint(conf.rfd, "tag dhcp");
mkclientid();
dhcpquery(!noconfig, Sselecting); dhcpquery(!noconfig, Sselecting);
} }
@ -1012,7 +999,7 @@ ndbconfig(void)
memset(ips, 0, sizeof(ips)); memset(ips, 0, sizeof(ips));
if(!isether() || myetheraddr(conf.hwa, conf.dev) != 0) if(conf.hwatype != 1)
sysfatal("can't read hardware address"); sysfatal("can't read hardware address");
snprint(etheraddr, sizeof(etheraddr), "%E", conf.hwa); snprint(etheraddr, sizeof(etheraddr), "%E", conf.hwa);
@ -1033,7 +1020,7 @@ ndbconfig(void)
sysfatal("no ip addresses found in ndb"); sysfatal("no ip addresses found in ndb");
/* add link local address first, if not already done */ /* add link local address first, if not already done */
if(!validip(conf.lladdr) && !findllip(conf.lladdr, ifc)){ if(!findllip(conf.lladdr, ifc)){
for(i = 0; i < n; i++){ for(i = 0; i < n; i++){
ipmove(conf.laddr, ips+i*IPaddrlen); ipmove(conf.laddr, ips+i*IPaddrlen);
if(ISIPV6LINKLOCAL(conf.laddr)){ if(ISIPV6LINKLOCAL(conf.laddr)){
@ -1053,8 +1040,7 @@ ndbconfig(void)
/* add v4 addresses and v6 if link local address is available */ /* add v4 addresses and v6 if link local address is available */
for(i = 0; i < n; i++){ for(i = 0; i < n; i++){
ipmove(conf.laddr, ips+i*IPaddrlen); ipmove(conf.laddr, ips+i*IPaddrlen);
if(isv4(conf.laddr) if(isv4(conf.laddr) || ipcmp(conf.laddr, conf.lladdr) != 0){
|| validip(conf.lladdr) && ipcmp(conf.laddr, conf.lladdr) != 0){
ndb2conf(db, conf.laddr); ndb2conf(db, conf.laddr);
doadd(); doadd();
} }