Exemplo n.º 1
0
a_status_t acfg_get_br_list()
{
    int i, err;
    int ifindices[32];
    int num, br_socket_fd;
    struct bridge *br;
    struct port *p;

    br_socket_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (br_socket_fd  < 0) {
        return A_STATUS_FAILED;
    }
    num = br_ioctl(br_socket_fd, BRCTL_GET_BRIDGES, 
            (unsigned long) ifindices, 32);
    if (num < 0) {
        return A_STATUS_FAILED;
    }
    for (i = 0; i < num; i++) {

        br = malloc(sizeof(struct bridge));
        memset(br, 0, sizeof(struct bridge));
        br->ifindex = ifindices[i];
        br->firstport = NULL;
        if (if_indextoname(br->ifindex, br->ifname) == NULL) {
            return A_STATUS_FAILED;
        }

        br->next = bridge_list;
        bridge_list = br;
        if ((err = br_make_port_list(br, br_socket_fd)) != 0) {
            return A_STATUS_FAILED;
        }

    }
    br = bridge_list;
    acfg_print("num br = %d\n", num);	
    for (i = 0; i < num; i++) {
        acfg_print("br = %s\n", br->ifname);
        p = br->firstport;
        while (p != NULL) {
            acfg_print("Ii = %s\n", p->ifname);
            p = p->next;
        }		
        br = br->next;		
    }
    return A_STATUS_OK;
}
Exemplo n.º 2
0
int br_make_bridge_list()
{
	int err;
	int i;
	int ifindices[32];
	int num;

	num = br_ioctl(BRCTL_GET_BRIDGES, (unsigned long)ifindices, 32);
	if (num < 0)
		return errno;

	bridge_list = NULL;
	for (i=0;i<num;i++) {
		struct bridge *br;

		br = malloc(sizeof(struct bridge));
		memset(br, 0, sizeof(struct bridge));
		br->ifindex = ifindices[i];
		br->firstport = NULL;
		br->next = bridge_list;
		bridge_list = br;
		if ((err = br_read_info(br)) != 0)
			goto error_out;
		if ((err = br_make_port_list(br)) != 0)
			goto error_out;
	}

	return 0;

 error_out:
	while (bridge_list != NULL) {
		struct bridge *nxt;

		nxt = bridge_list->next;
		br_nuke_bridge(bridge_list);
		bridge_list = nxt;
	}

	return err;
}
Exemplo n.º 3
0
struct bridge *br_create_bridge_by_index(int index)
{
	struct bridge *br;
	int err;

	br = malloc(sizeof(struct bridge));
	if (!br) {
		return NULL;
	}
	memset(br, 0, sizeof(struct bridge));
	br->ifindex = index;
	br->firstport = NULL;

	if ((err = br_read_info(br)) != 0)
		goto error_out;
	if ((err = br_make_port_list(br)) != 0)
		goto error_out;

	return br;

error_out:
	br_nuke_bridge(br);
	return NULL;
}