Beispiel #1
0
/*************************************************************************************** 
 *   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);
	}

}
Beispiel #2
0
/*************************************************************************************** 
 *   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);
	}
}
Beispiel #3
0
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);
}