/** * Function: modifyBoardMacAddress * Description: 修改board结构体中的静态Mac地址的配置 * @param temp 静态Mac地址的结构体,存储MAC地址的相关信息 * **/ int modifyBoardMacAddress(struct MacLink *temp) { int i; for(i = 0; i < MAXMACADDRNUM; i++) { if(board.mac_address.mac_table[i].end == 1) { break; } if( !Str_cmp(board.mac_address.mac_table[i].mac_addr,temp->mac_entry.new_mac,6) && board.mac_address.mac_table[i].vlan_id == temp->mac_entry.vlan_id) { board.mac_address.mac_table[i].port_vector = temp->mac_entry.port_vector; } } }
static uint8_t InVariate_Init(BOARD *the_board,uint32_t struct_len) { uint32_t loop; uint8_t tem_MAC[6]; SPECIAL_T the_special; /*Get the Set VETH2000's MAC address that stored in the FLASH memory*/ if( ! Get_InVariate(&the_special,sizeof(SPECIAL_T)) ) { return 0; } /*Judge if the readout MAC address is all '0xFFs',if so set the initial information for the struct INVARIATE_T*/ if( !Str_cmp(the_special.sets_info.The_MAC,GET_NEXT,6) /*||(0x02 & Get_DIAL_Mode()) == 0x02&& !strcmp(invarite->The_Info.The_type,SET_INFO.The_type)*/ ) {//if( !Str_cmp(the_board->sets_info.The_MAC,GET_NEXT,6) ) Str_cpy(the_board->sets_info.The_MAC,KEY_MAC,6); }else{ Get_InVariate(the_board,sizeof(BOARD)); } return 1; }
int compare(const void *x, const void *y) { return Str_cmp(*(char **)x, 1, 0, *(char **)y, 1, 0); }
/** * Function: generateMacData * Description: 生成Mac地址的相关信息函数,生成的信息包括了老化时间、学习模式和目前用户配置的所有静态Mac地址 * **/ char* generateMacData() { static char mac_status[1024]; char static_table[100]; struct MacLink *p; int current_age_time = 300; int disable_age = 0; unsigned char i; unsigned char mac_address[20]; char change_status[PORTSNUM + 1]; //unsigned char mac[10]; uint16_t learn_mode; char port_mode[PORTSNUM + 1]; int ports_vector[PORTSNUM]; //char vector_str[5]; // port_mode = (char*)malloc(ports_num * sizeof(char)); // ports_vector = (int*)malloc(ports_num * sizeof(int)); for(i = 0; i < ports_num; i++) { port_mode[i] = 'A'; } port_mode[PORTSNUM] = 0; for(i = 0; i < ports_num; i++) { change_status[i] = '1'; } change_status[PORTSNUM] = 0; initRoot();//初始化root节点 //获取老化是否可用 // current_age_time = Get_Age_time(); // if(current_age_time == 0){ // disable_age = 1; // }else{ // // } //获取端口学习模式 learn_mode = Get_MAC_forbid(); for(i = 0; i < ports_num; i++) { if((learn_mode & (0x01 << i))) { port_mode[i] = 'D'; } } //sprintf(mac_status,"%d/%d/%s/%s/-|",board.mac_address.age_time,board.mac_address.disable_age,port_mode,change_status); memset(static_table,0,sizeof(static_table)); memset(mac_status,0,sizeof(mac_status)); sprintf(mac_status,"%d/%d/%s/%s|",board.mac_address.age_time,board.mac_address.disable_age,port_mode,change_status); if(mac_root) { for( p = mac_root; p; p = p->next ) { //得到静态Mac地址 //printf("dym is %d\n\r",p->mac_entry.sta_or_dym); if(p->mac_entry.sta_or_dym == ENTRY_DYNAMIC || !Str_cmp(p->mac_entry.new_mac,board.sets_info.The_MAC,6) || !Str_cmp(p->mac_entry.new_mac,MGMT_MAC,6)) { continue; } memset(static_table,0,sizeof(static_table)); memset(ports_vector,0,ports_num * sizeof(int)); getPortsVectorArray(p->mac_entry.port_vector,ports_vector); memset(mac_address,0,sizeof(mac_address)); getMacString(mac_address,p->mac_entry.new_mac); //printf("mac_address is %s\n\r",mac_address); sprintf(static_table,"%s/%d/",mac_address,p->mac_entry.vlan_id); /* 拼接要发送的向量字符串 */ concatVectorString(static_table,ports_vector); strcat(mac_status,static_table); } } //printf("mac_status is %s\n\r",mac_status); return mac_status; }