示例#1
0
void br_cmd_showmacs(struct bridge *br, char *arg0, char *arg1)
{
	struct fdb_entry fdb[1024];
	int offset;

	printf("port no\tmac addr\t\tis local?\tageing timer\n");

	offset = 0;
	while (1) {
		int i;
		int num;
#ifdef GUEST_ZONE
		num = br_read_fdb(br, fdb, offset, 1024, 0);
#else
		num = br_read_fdb(br, fdb, offset, 1024);
#endif
		if (!num)
			break;

		qsort(fdb, num, sizeof(struct fdb_entry), compare_fdbs);

		for (i=0;i<num;i++)
			__dump_fdb_entry(fdb+i);

		offset += num;
	}
}
示例#2
0
void br_cmd_showmacs(struct bridge *br, char *arg0, char *arg1)
{
	struct fdb_entry fdb[1024];
	int offset;

	printf("port no\tmac addr\t\tis local?\tageing timer\n");

	offset = 0;
	while (1) {
		int i;
		int num;

		num = br_read_fdb(br, fdb, offset, 1024);
		if (!num)
			break;

		qsort(fdb, num, sizeof(struct fdb_entry), compare_fdbs);

#ifdef CONFIG_NSBBOX_BRCTL_MAT_STATUS
#define MACADDRPOOL_CLONE_PATH "/runtime/phyinf:1/macaddrpool/entry"
{
		struct fdb_entry *pfdb;
		unsigned char value[20];
		unsigned char path[50];
		int j=1;
		
		xmldbc_del(NULL, 0, MACADDRPOOL_CLONE_PATH);
		for (i=0;i<num;i++){
		    pfdb = (struct fdb_entry *)(fdb+i);
			__dump_fdb_entry(fdb+i);
			if ((pfdb->port_no==1)&&(pfdb->is_local != 1)){
                memset(path, 0x0, sizeof(path));
                memset(value, 0x0, sizeof(value));
                sprintf(path, "%s:%d/macaddr", MACADDRPOOL_CLONE_PATH, j);
                sprintf(value, "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",
                    pfdb->mac_addr[0], pfdb->mac_addr[1], pfdb->mac_addr[2],
                    pfdb->mac_addr[3], pfdb->mac_addr[4], pfdb->mac_addr[5]);
                //printf("%s %s\n", path, value);
                xmldbc_set(NULL, 0, path, value);
                j++;
            }
		}
}
#else
		for (i=0;i<num;i++)
			__dump_fdb_entry(fdb+i);
#endif /*CONFIG_NSBBOX_BRCTL_MAT_STATUS*/

		offset += num;
	}
}
示例#3
0
static int br_cmd_showmacs(int argc, char *const* argv)
{
	const char *brname = argv[1];
#define CHUNK 128
	int i, n;
	struct fdb_entry *fdb = NULL;
	int offset = 0;

	for(;;) {
		fdb = realloc(fdb, (offset + CHUNK) * sizeof(struct fdb_entry));
		if (!fdb) {
			fprintf(stderr, "Out of memory\n");
			return 1;
		}
			
		n = br_read_fdb(brname, fdb+offset, offset, CHUNK);
		if (n == 0)
			break;

		if (n < 0) {
            free(fdb);
			fprintf(stderr, "read of forward table failed: %s\n",
				strerror(errno));
			return 1;
		}

		offset += n;
	}

	qsort(fdb, offset, sizeof(struct fdb_entry), compare_fdbs);

	printf("port no\tmac addr\t\tis local?\tageing timer\n");
	for (i = 0; i < offset; i++) {
		const struct fdb_entry *f = fdb + i;
		printf("%3i\t", f->port_no);
		printf("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\t",
		       f->mac_addr[0], f->mac_addr[1], f->mac_addr[2],
		       f->mac_addr[3], f->mac_addr[4], f->mac_addr[5]);
		printf("%s\t\t", f->is_local?"yes":"no");
		br_show_timer(&f->ageing_timer_value);
		printf("\n");
	}
	return 0;
}
示例#4
0
void br_cmd_chk_guestmac(struct bridge *br, char *arg0, char *arg1)
{
	unsigned char mac[6];
	unsigned int tmp[6];
	struct fdb_entry fdb[1024];
	int offset;
	int verbose;

	sscanf(arg0, "%i", &verbose);	

	if (sscanf(arg1, "%02x%02x%02x%02x%02x%02x", 
			&tmp[0], &tmp[1], &tmp[2], &tmp[3], &tmp[4], &tmp[5]) != 6) {
		fprintf(stderr, "invalid mac address format [xxxxxxxxxxxx]!\n");
		return;			
	}
	mac[0] = (unsigned char)tmp[0];
	mac[1] = (unsigned char)tmp[1];
	mac[2] = (unsigned char)tmp[2];
	mac[3] = (unsigned char)tmp[3];
	mac[4] = (unsigned char)tmp[4];
	mac[5] = (unsigned char)tmp[5];

	offset = 0;
	while (1) {
		int i;
		int num;
		num = br_read_fdb(br, fdb, offset, 1024, 1);
		if (!num) {
			break;
		}
		
		for (i=0;i<num;i++) {			
			if (!memcmp(fdb[i].mac_addr, mac, 6)) {
				if (verbose)
					fprintf(stderr, "is guest address!\n");
				exit(1);
			}			
		}
		offset += num;
	}
	if (verbose)
		fprintf(stderr, "not guest address!\n");	
}