/*************************************************************************************** * Name: parse_router_line * Desc: Parse router configure to data * Input: * @line - line to parse * Output: * @rc - router data * Return: int, 0 on success; -1 on error * Others: - ***************************************************************************************/ void parse_router_line(const char *line, RT_CFG_T *rc) { if (!line || !rc) { LOGW("NULL\n"); return; } char val[32] = {0}; if (strstr(line, "router_src_ip")) { sscanf(line + strlen("router_src_ip="), "%[0-9.]", val); rc->rt_src_ip = ip_aton(val); } else if (strstr(line, "router_dst_ip")) { sscanf(line + strlen("router_dst_ip="), "%[0-9.]", val); rc->rt_dst_ip = ip_aton(val); } else if (strstr(line, "router_netmask")) { sscanf(line + strlen("router_netmask="), "%[0-9.]", val); rc->rt_netmask = ip_aton(val); } else if (strstr(line, "router_interface")) { sscanf(line + strlen("router_interface="), "%s", rc->rt_if); } else { LOGW("Matching fail, %s", line); } }
/*************************************************************************************** * Name: parse_com_line * Desc: Parse common configure to data * Input: * @line - line to parse * Output: * @cc - common data * Return: int, 0 on success; -1 on error * Others: - ***************************************************************************************/ void parse_com_line(const char *line, COM_CFG_T *cc) { if (!line || !cc) { LOGW("NULL\n"); return; } char val[32] = {0}; if (strstr(line, "sis_out_ip")) { sscanf(line + strlen("sis_out_ip="), "%[0-9.]", val); cc->sis_out_ip = ip_aton(val); } else if (strstr(line, "sis_in_ip")) { sscanf(line + strlen("sis_in_ip="), "%[0-9.]", val); cc->sis_in_ip = ip_aton(val); } else if (strstr(line, "sis_interface")) { sscanf(line + strlen("sis_interface="), "%s", cc->sis_if); } else { LOGW("Matching fail, %s", line); } }
int parse_host_range(const char *range, uint32_t *start, uint32_t *end) { struct addr addr, bcast; uint32_t val, mask; u_int u[4]; char *p, *s; int ret = -1; if ((p = strdup(range)) == NULL) return (ret); if (addr_aton(p, &addr) == 0 && addr.addr_type == ADDR_TYPE_IP) { if (addr.addr_bits != IP_ADDR_BITS) { *start = htonl(ntohl(addr.addr_ip) + 1); addr_bcast(&addr, &bcast); *end = htonl(ntohl(bcast.addr_ip) - 1); } else *start = *end = addr.addr_ip; ret = 0; } else if ((s = strchr(p, '-')) != NULL) { *s = '\0'; if (ip_aton(p, start) == 0) { if (ip_aton(s + 1, end) == 0) { ret = 0; } else if ((val = atoi(s + 1)) > 0 && val <= 0xff) { *end = (*start & IP_CLASSC_NET) | htonl(val); ret = 0; } } } else if ((s = strchr(p, '/')) != NULL) { *s = '\0'; memset(u, 0, sizeof(u)); if (sscanf(p, "%d.%d.%d.%d", &u[0], &u[1], &u[2], &u[3]) > 0 && addr_btom(atoi(s + 1), &mask, IP_ADDR_LEN) == 0) { val = ((u[0]<<24) | (u[1]<<16) | (u[2]<<8) | u[3]) & ntohl(mask); *start = htonl(val + 1); *end = htonl((val | ~(ntohl(mask))) - 1); ret = 0; } } free(p); return (ret); }