Beispiel #1
0
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);
}
Beispiel #2
0
int main()
{
  pigeonattach(1);
  init();
  setipaddr("pg0", 0xc0a80002);  // 192.168.0.2

  test_ping();
  return 0;
}
Beispiel #3
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;
	    }
	}
    }
}
Beispiel #4
0
/*
 *  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;
}