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; } }
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; } }
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; }
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"); }