亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? if-json.c.svn-base

?? 嵌入式無線路由系統openwrt的web配置工具
?? SVN-BASE
?? 第 1 頁 / 共 2 頁
字號:
    if (ioctl(skfd, SIOCGIFBRDADDR, &ifr) >= 0) ife->broadaddr = ifr.ifr_broadaddr;

    strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
    memset(&ife->netmask, 0, sizeof(struct sockaddr));
    if (ioctl(skfd, SIOCGIFNETMASK, &ifr) >= 0) ife->netmask = ifr.ifr_netmask;
  }

  close(skfd);
  return 0;
}

int if_readconf(void) {
  int numreqs = 30;
  struct ifconf ifc;
  struct ifreq *ifr;
  int n, err = -1;
  int skfd;

  ifc.ifc_buf = NULL;

  skfd = socket(AF_INET, SOCK_DGRAM, 0);
  if (skfd < 0) {
    fprintf(stderr, "error: no inet socket available");
    return -1;
  }

  for (;;) {
    ifc.ifc_len = sizeof(struct ifreq) * numreqs;
    ifc.ifc_buf = xrealloc(ifc.ifc_buf, ifc.ifc_len);

    if (ioctl_or_warn(skfd, SIOCGIFCONF, &ifc) < 0) {
      goto out;
    }
    if (ifc.ifc_len == sizeof(struct ifreq) * numreqs) {
      numreqs += 10;
      continue;
    }
    break;
  }

  ifr = ifc.ifc_req;
  for (n = 0; n < ifc.ifc_len; n += sizeof(struct ifreq)) {
    add_interface(ifr->ifr_name);
    ifr++;
  }
  err = 0;

 out:
  close(skfd);
  free(ifc.ifc_buf);
  return err;
}

int if_readlist_proc() {
  static int proc_read;

  FILE *fh;
  char buf[512];
  struct interface *ife;
  int err, procnetdev_vsn;
  proc_read = 1;

  fh = fopen(_PATH_PROCNET_DEV, "r");
  if (!fh) {
    fprintf(stderr, "warning: cannot open %s, limiting output", _PATH_PROCNET_DEV);
    return if_readconf();
  }
  fgets(buf, sizeof buf, fh);
  fgets(buf, sizeof buf, fh);

  procnetdev_vsn = procnetdev_version(buf);

  err = 0;
  while (fgets(buf, sizeof buf, fh)) {
    char *s, name[128];

    s = get_name(name, buf);
    ife = add_interface(name);
    get_dev_fields(s, ife, procnetdev_vsn);
    ife->statistics_valid = 1;
  }
  if (ferror(fh)) {
    fprintf(stderr, "read error: %s", _PATH_PROCNET_DEV);
    err = -1;
    proc_read = 0;
  }
  fclose(fh);
  return err;
}

int if_readlist(void) {
  int err = if_readlist_proc(NULL);
  if (!err) {
    err = if_readconf();
  }
  return err;
}

int ioctl_or_warn(int fd, int request, void *argp) {
  int ret;

  ret = ioctl(fd, request, argp);
  if (ret < 0) fprintf(stderr, "ioctl %#x failed", request);
  return ret;
}

struct interface *add_interface(char *name) {
  struct interface *ife, **nextp, *new;

  for (ife = int_last; ife; ife = ife->prev) {
    int n = strcmp(ife->name, name);

    if (n == 0) return ife;
    if (n < 0) break;
  }

  new = xzalloc(sizeof(*new));
  safe_strncpy(new->name, name, IFNAMSIZ);
  nextp = ife ? &ife->next : &int_list;
  new->prev = ife;
  new->next = *nextp;
  if (new->next) new->next->prev = new;
  else int_last = new;
  *nextp = new;
  return new;
}

void get_dev_fields(char *bp, struct interface *ife, int procnetdev_vsn) {
  memset(&ife->stats, 0, sizeof(struct user_net_device_stats));

  sscanf(bp, ss_fmt[procnetdev_vsn],
       &ife->stats.rx_bytes,
       &ife->stats.rx_packets,
       &ife->stats.rx_errors,
       &ife->stats.rx_dropped,
       &ife->stats.rx_fifo_errors,
       &ife->stats.rx_frame_errors,
       &ife->stats.rx_compressed,
       &ife->stats.rx_multicast,
       &ife->stats.tx_bytes,
       &ife->stats.tx_packets,
       &ife->stats.tx_errors,
       &ife->stats.tx_dropped,
       &ife->stats.tx_fifo_errors,
       &ife->stats.collisions,
       &ife->stats.tx_carrier_errors,
       &ife->stats.tx_compressed
       );

  if (procnetdev_vsn <= 1) {
    if (procnetdev_vsn == 0) {
      ife->stats.rx_bytes = 0;
      ife->stats.tx_bytes = 0;
    }
    ife->stats.rx_multicast = 0;
    ife->stats.rx_compressed = 0;
    ife->stats.tx_compressed = 0;
  }
}

char *get_name(char *name, char *p) {
  int namestart = 0, nameend = 0;

  while (isspace(p[namestart]))
    namestart++;
  nameend = namestart;
  while (p[nameend] && p[nameend] != ':' && !isspace(p[nameend]))
    nameend++;
  if (p[nameend] == ':') {
    if ((nameend - namestart) < IFNAMSIZ) {
      memcpy(name, &p[namestart], nameend - namestart);
      name[nameend - namestart] = '\0';
      p = &p[nameend];
    } else {
      name[0] = '\0';
    }
  } else {
    name[0] = '\0';
  }
  return p + 1;
}

/* memory functions */
void *xrealloc(void *ptr, size_t size) {
  ptr = realloc(ptr, size);
  if (ptr == NULL && size != 0) {
    fprintf(stderr, "cannot allocate memory");
    exit(1);
  }
  return ptr;
}

void *xmalloc(size_t size) {
  void *ptr = malloc(size);
  if (ptr == NULL && size != 0) {
    fprintf(stderr, "cannot allocate memory");
    exit(1);
  }
  return ptr;
}

void *xzalloc(size_t size) {
  void *ptr = xmalloc(size);
  memset(ptr, 0, size);
  return ptr;
}

char *safe_strncpy(char *dst, const char *src, size_t size) {
  if (!size) return dst;
  dst[--size] = '\0';
  return strncpy(dst, src, size);
}

char *xasprintf(const char *format, ...) {
  va_list p;
  int r;
  char *string_ptr;

  va_start(p, format);
  r = vasprintf(&string_ptr, format, p);
  va_end(p);

  if (r < 0) {
    fprintf(stderr, "cannot allocate memory");
    exit(1);
  }
  return string_ptr;
}

char * xstrdup(const char *s) {
  char *t;

  if (s == NULL)
    return NULL;

  t = strdup(s);

  if (t == NULL) {
    fprintf(stderr, "cannot allocate memory");
    exit(1);
  }
  return t;
}

inline int procnetdev_version(char *buf) {
  if (strstr(buf, "compressed")) return 2;
  if (strstr(buf, "bytes")) return 1;
  return 0;
}

const struct hwtype *get_hwntype(int type) {
  const struct hwtype *const *hwp;

  hwp = hwtypes;
  while (*hwp != NULL) {
    if ((*hwp)->type == type)
      return *hwp;
    hwp++;
  }
  return NULL;
}

const struct aftype *get_afntype(int af) {
  const struct aftype *const *afp;

  afp = aftypes;
  while (*afp != NULL) {
    if ((*afp)->af == af)
      return *afp;
    afp++;
  }
  return NULL;
}

char *print_ether(unsigned char *ptr) {
  static char *buff;

  free(buff);
  buff = xasprintf("%02X:%02X:%02X:%02X:%02X:%02X",
       (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
       (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
    );
  return buff;
}

const char *sprint_inet(struct sockaddr *sap, int numeric) {
  static char *buff;
  free(buff);

  if (sap->sa_family == 0xFFFF || sap->sa_family == 0) {
    return "*";
  }
  buff = inet_addr((struct sockaddr_in *) sap);
  return buff;
}

const char *sprint_unspec(struct sockaddr *sap, int numeric) {
  if (sap->sa_family == 0xFFFF || sap->sa_family == 0)
    return "*";
  return print_unspec((unsigned char *)sap->sa_data);
}

char *print_unspec(unsigned char *ptr) {
  static char *buff;

  char *pos;
  unsigned int i;

  if (!buff);
    buff = xmalloc(sizeof(struct sockaddr) * 3 + 1);
  pos = buff;
  for (i = 0; i < sizeof(struct sockaddr); i++) {
    sprintf(pos, "%02X-", (*ptr++ & 0377));
    pos += 3;
  }
  *--pos = '\0';
  return buff;
}

char *inet_addr(struct sockaddr_in *s_in) {
  uint32_t ad;
  if (s_in->sin_family != AF_INET) {
    errno = EAFNOSUPPORT;
    return NULL;
  }
  ad = s_in->sin_addr.s_addr;

  if (ad == INADDR_ANY) {
    return xstrdup("*");
  }

  return xstrdup((const char *) inet_ntoa(s_in->sin_addr));
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本一本大道香蕉久在线精品 | 麻豆视频观看网址久久| 亚洲天堂2014| 椎名由奈av一区二区三区| 亚洲国产成人午夜在线一区| xf在线a精品一区二区视频网站| 日韩欧美中文字幕制服| 91精品国产全国免费观看| 欧美精品丝袜久久久中文字幕| 欧美影院午夜播放| 欧美日韩亚洲综合一区 | 亚洲日本va午夜在线影院| 美女脱光内衣内裤视频久久影院| 亚洲国产一区二区视频| 无吗不卡中文字幕| 日韩国产高清在线| 久久99国产精品麻豆| 国内精品久久久久影院色| 国产精品系列在线播放| 高清成人免费视频| 99久久国产综合精品女不卡| 亚洲欧洲日韩在线| 国产清纯白嫩初高生在线观看91 | 亚洲欧美日韩国产另类专区| 国产精品视频观看| 国产欧美一区二区精品久导航| 日韩精品一区二区在线观看| 欧美男人的天堂一二区| av电影在线观看完整版一区二区| 高清视频一区二区| 处破女av一区二区| 精品一区二区三区不卡| 亚洲地区一二三色| 精品国产乱码久久久久久老虎| 欧美高清一级片在线| 欧美丰满一区二区免费视频| 91久久久免费一区二区| 久久精品在线观看| 国内不卡的二区三区中文字幕| 91蝌蚪porny| 精品国产区一区| 国产欧美日韩在线| 欧美国产激情二区三区| 亚洲欧洲综合另类| 日韩成人一区二区| 色综合久久99| 蜜桃av一区二区三区电影| 一区二区三区在线影院| 亚洲香肠在线观看| 国产福利精品一区| 在线观看日韩精品| 久久综合av免费| 一区二区三区蜜桃| 国内成+人亚洲+欧美+综合在线| 99久久免费精品高清特色大片| 91精品国产综合久久久久久| 欧美激情一区二区三区蜜桃视频 | 中文字幕一区免费在线观看| 亚洲二区在线视频| 国产成人99久久亚洲综合精品| 欧美久久久久久久久| 欧美日韩激情在线| 久久婷婷国产综合精品青草| 亚洲精品老司机| 韩国一区二区视频| 日韩欧美亚洲国产精品字幕久久久| 欧美经典三级视频一区二区三区| 日韩av电影免费观看高清完整版在线观看 | 欧美理论电影在线| 成人欧美一区二区三区小说 | 国产精品不卡在线观看| 久久精品国产一区二区三区免费看| av在线这里只有精品| 欧美国产激情二区三区| eeuss国产一区二区三区| 欧美高清你懂得| 国产精品久久久久一区二区三区| 日韩理论片一区二区| 国产清纯美女被跳蛋高潮一区二区久久w | 亚洲成人手机在线| 中文在线资源观看网站视频免费不卡| 精品国产一区二区三区av性色| 久久国产生活片100| 色又黄又爽网站www久久| 久久精品欧美一区二区三区麻豆| 亚洲成av人片一区二区梦乃 | 日韩一区二区三区免费看| 亚洲激情av在线| 99久久精品国产一区二区三区| 久久亚洲捆绑美女| 久久99久久99| 欧美一级高清片在线观看| 国产黑丝在线一区二区三区| 欧美一级高清大全免费观看| 亚洲bdsm女犯bdsm网站| 欧美三级韩国三级日本三斤| 亚洲精品中文字幕乱码三区| 99热这里都是精品| 国产精品美女一区二区| 国产成人精品免费网站| 欧美激情综合网| 国产成人精品综合在线观看 | 精品sm在线观看| 人人超碰91尤物精品国产| 欧美日韩国产欧美日美国产精品| 一区二区三区久久| 日本道精品一区二区三区| 亚洲欧美国产三级| 色乱码一区二区三区88| 亚洲欧美一区二区三区久本道91| 91天堂素人约啪| 亚洲精品亚洲人成人网 | 日韩欧美国产电影| 美女视频黄a大片欧美| 日韩欧美一区中文| 国内精品免费**视频| 欧美国产日产图区| 97精品电影院| 亚洲一区二区黄色| 91精品国产欧美一区二区18| 精品一区二区三区在线观看国产| 精品国产乱码久久久久久老虎 | 欧美大片在线观看| 国产美女精品人人做人人爽| 国产人久久人人人人爽| 成年人午夜久久久| 亚洲愉拍自拍另类高清精品| 欧美精品免费视频| 国产美女av一区二区三区| 欧美国产一区二区在线观看| 99精品偷自拍| 日韩和欧美一区二区三区| 久久亚洲私人国产精品va媚药| 99riav久久精品riav| 视频一区中文字幕国产| 久久久不卡网国产精品二区| 97久久超碰精品国产| 午夜视频在线观看一区二区| www精品美女久久久tv| 99视频超级精品| 日韩精品1区2区3区| 欧美国产精品劲爆| 欧美色欧美亚洲另类二区| 九九**精品视频免费播放| 国产精品毛片高清在线完整版 | 26uuuu精品一区二区| 97国产一区二区| 免费在线观看视频一区| 中文字幕精品一区二区三区精品| 欧洲av在线精品| 国产做a爰片久久毛片| 国产精品69久久久久水密桃| 亚洲色图欧洲色图婷婷| 精品免费99久久| 色偷偷久久人人79超碰人人澡| 免费在线观看一区二区三区| 综合色天天鬼久久鬼色| 欧美一区二区三区视频免费| 成人av网址在线| 日韩福利电影在线| 亚洲欧美日韩国产另类专区| 精品免费一区二区三区| 日本高清成人免费播放| 国产曰批免费观看久久久| 一区二区三区免费观看| 国产农村妇女毛片精品久久麻豆 | 久久精品国产77777蜜臀| 亚洲欧美自拍偷拍色图| 日韩欧美在线观看一区二区三区| 91在线视频网址| 精品亚洲成av人在线观看| 亚洲一区二区视频在线观看| 中文字幕欧美三区| 日韩视频在线永久播放| 欧美影片第一页| 成人av网站大全| 国模一区二区三区白浆| 日韩成人av影视| 亚洲一区二区三区四区的| 国产精品乱码一区二区三区软件| 日韩精品中午字幕| 欧美精品在线视频| 91论坛在线播放| 成人免费黄色在线| 国产一区二区精品久久99| 日本免费在线视频不卡一不卡二| 亚洲一卡二卡三卡四卡无卡久久| 国产精品美女久久久久久久 | 精品亚洲porn| 日韩黄色小视频| 亚洲成人资源在线| 亚洲精品亚洲人成人网| 最好看的中文字幕久久| 国产欧美一区二区精品婷婷| www成人在线观看| 精品久久国产字幕高潮| 欧美一区二区在线视频| 欧美猛男超大videosgay| 日本精品裸体写真集在线观看 | 久久精品综合网|