static int pppbt_setipaddr(char **argv) { //char ipaddr[PPPBT_IP_ADDR_LEN + 1] = "192.168.3.2"; char ipaddr[PPPBT_IP_ADDR_LEN + 1]; char *addr; char *ch; info("pppbt_setipaddr: %s\n", *argv); //getipaddr(*argv, ipaddr); memset(ipaddr, 0, sizeof(ipaddr)); if (ip_dun_create_netdev(*argv, ipaddr) < 0) { return -1; } addr = (char *)malloc(strlen(ipaddr) + 2); if (addr == NULL) { return -1; } memset(addr, 0, strlen(ipaddr) + 2); memcpy(addr, ipaddr, strlen(ipaddr)); ch = addr + strlen(ipaddr); *ch = ':'; info("ip addr: %s", addr); return setipaddr(addr, NULL, 1); }
int main() { pigeonattach(1); init(); setipaddr("pg0", 0xc0a80002); // 192.168.0.2 test_ping(); return 0; }
static void auth_set_ip_addr(int unit) { struct wordlist *addrs; if (non_wildclient && (addrs = addresses[unit]) != NULL) { for (; addrs != NULL; addrs = addrs->next) { /* Look for address overrides, and set them if we have any */ if (strchr(addrs->word, ':') != NULL) { if (setipaddr(addrs->word)) break; } } } }
/* * do an ipinfo with defaults */ int lookupip(uchar *ipaddr, Info *iip, int gate) { char ip[32]; Ndbtuple *t, *nt; char *attrs[32], **p; if(opendb() == nil){ warning(1, "can't open db"); return -1; } p = attrs; *p++ = "ip"; *p++ = "ipmask"; *p++ = "@ipgw"; if(!gate){ *p++ = "bootf"; *p++ = "bootf2"; *p++ = "@tftp"; *p++ = "@tftp2"; *p++ = "rootpath"; *p++ = "dhcp"; *p++ = "vendorclass"; *p++ = "ether"; *p++ = "dom"; *p++ = "@fs"; *p++ = "@auth"; } *p = 0; memset(iip, 0, sizeof(*iip)); snprint(ip, sizeof(ip), "%I", ipaddr); t = ndbipinfo(db, "ip", ip, attrs, p - attrs); if(t == nil) return -1; for(nt = t; nt != nil; nt = nt->entry){ if(strcmp(nt->attr, "ip") == 0) setipaddr(iip->ipaddr, nt->val); else if(strcmp(nt->attr, "ipmask") == 0) setipmask(iip->ipmask, nt->val); else if(strcmp(nt->attr, "fs") == 0) setipaddr(iip->fsip, nt->val); else if(strcmp(nt->attr, "auth") == 0) setipaddr(iip->auip, nt->val); else if(strcmp(nt->attr, "tftp") == 0) setipaddr(iip->tftp, nt->val); else if(strcmp(nt->attr, "tftp2") == 0) setipaddr(iip->tftp2, nt->val); else if(strcmp(nt->attr, "ipgw") == 0) setipaddr(iip->gwip, nt->val); else if(strcmp(nt->attr, "ether") == 0){ /* * this is probably wrong for machines with multiple * ethers. bootp or dhcp requests could come from any * of the ethers listed in the ndb entry. */ if(memcmp(iip->etheraddr, noetheraddr, 6) == 0) parseether(iip->etheraddr, nt->val); iip->indb = 1; } else if(strcmp(nt->attr, "dhcp") == 0){ if(iip->dhcpgroup[0] == 0) strcpy(iip->dhcpgroup, nt->val); } else if(strcmp(nt->attr, "bootf") == 0){ if(iip->bootf[0] == 0) strcpy(iip->bootf, nt->val); } else if(strcmp(nt->attr, "bootf2") == 0){ if(iip->bootf2[0] == 0) strcpy(iip->bootf2, nt->val); } else if(strcmp(nt->attr, "vendor") == 0){ if(iip->vendor[0] == 0) strcpy(iip->vendor, nt->val); } else if(strcmp(nt->attr, "dom") == 0){ if(iip->domain[0] == 0) strcpy(iip->domain, nt->val); } else if(strcmp(nt->attr, "rootpath") == 0){ if(iip->rootpath[0] == 0) strcpy(iip->rootpath, nt->val); } } ndbfree(t); maskip(iip->ipaddr, iip->ipmask, iip->ipnet); return 0; }