Exemple #1
0
/**
 * 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;
  }
Exemple #3
0
int compare(const void *x, const void *y) {
	return Str_cmp(*(char **)x, 1, 0, *(char **)y, 1, 0);
}
Exemple #4
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;
}