コード例 #1
0
ファイル: ipc_frontend.c プロジェクト: TKr/Wive-ng-rt8186
olsr_bool
ipc_check_allowed_ip(const union olsr_ip_addr *addr)
{
  struct ip_prefix_list *ipcn;

  if(addr->v4.s_addr == ntohl(INADDR_LOOPBACK)) {
    return OLSR_TRUE;
  }

  /* check nets */
  for (ipcn = olsr_cnf->ipc_nets; ipcn != NULL; ipcn = ipcn->next) {
    if (ip_in_net(addr, &ipcn->net)) { 
      return OLSR_TRUE;
    }
  }

  return OLSR_FALSE;
}
コード例 #2
0
ファイル: net.c プロジェクト: Dany3R9/Proj
/*
 *From net-tools lib/interface.c
 *
 */
int
get_ipv6_address(char *ifname, struct sockaddr_in6 *saddr6, struct olsr_ip_prefix *prefix)
{
  char addr6[40], devname[IFNAMSIZ];
  char addr6p[8][5];
  int plen, scope, dad_status, if_idx;
  FILE *f;
  union olsr_ip_addr tmp_ip;

  if ((f = fopen(PATH_PROCNET_IFINET6, "r")) != NULL) {
    while (fscanf
           (f, "%4s%4s%4s%4s%4s%4s%4s%4s %x %02x %02x %02x %20s\n", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4],
            addr6p[5], addr6p[6], addr6p[7], &if_idx, &plen, &scope, &dad_status, devname) != EOF) {
      if (!strcmp(devname, ifname)) {
        bool isNetWide = false;
        sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6],
                addr6p[7]);
        OLSR_PRINTF(5, "\tinet6 addr: %s\n", addr6);
        OLSR_PRINTF(5, "\tScope: %d\n", scope);

        inet_pton(AF_INET6, addr6, &tmp_ip.v6);

        isNetWide = (scope != IPV6_ADDR_LOOPBACK) && (scope != IPV6_ADDR_LINKLOCAL) && (scope != IPV6_ADDR_SITELOCAL);

        if ((prefix == NULL && isNetWide) || (prefix != NULL && ip_in_net(&tmp_ip, prefix))) {
          OLSR_PRINTF(4, "Found addr: %s:%s:%s:%s:%s:%s:%s:%s\n", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5],
                      addr6p[6], addr6p[7]);
          memcpy(&saddr6->sin6_addr, &tmp_ip.v6, sizeof(struct in6_addr));
          fclose(f);
          return 1;
        }
      }
    }
    fclose(f);
  }
  return 0;
}