void ethTxPolDA(int port, char* macStr, int txQ, char* headerHexStr) { void* pHndl; MV_ETH_TX_POLICY_MACDA daPolicy; MV_U8 header[MV_MAX_HEADER_LEN]; pHndl = mvEthTxPolicyHndlGet(port); if(pHndl == NULL) return; mvMacStrToHex(macStr, daPolicy.macDa); if(txQ > 0) { daPolicy.policy.txQ = txQ; if(headerHexStr != NULL) { /* each two char are one byte '55'-> 0x55 */ daPolicy.policy.headerSize = strlen(headerHexStr)/2; if(daPolicy.policy.headerSize > MV_MAX_HEADER_LEN) return; mvAsciiToHex(headerHexStr, header); daPolicy.policy.pHeader = header; } else daPolicy.policy.headerSize = 0; mvEthTxPolicyAdd(pHndl, &daPolicy); } else { mvEthTxPolicyDel(pHndl, daPolicy.macDa); } }
void ethMcastAdd(int port, char* macStr, int queue) { void* pHndl; MV_U8 macAddr[MV_MAC_ADDR_SIZE]; pHndl = mvEthPortHndlGet(port); if(pHndl != NULL) { mvMacStrToHex(macStr, macAddr); mvEthMcastAddrSet(pHndl, macAddr, queue); } }
/*********************************************************** * mvEgigaLoad -- * * load a network interface into uboot network core. * * initialize sw structures e.g. private, rings, etc. * ***********************************************************/ static int mvEgigaLoad(int port, char *name, char *enet_addr) { struct eth_device *dev = NULL; egigaPriv *priv = NULL; /* First disable GMAC */ mvGmacPortDisable(port); dev = malloc(sizeof(struct eth_device)); if (!dev) { printf("%s: %s falied to alloc eth_device (error)\n", __func__, name); goto error; } priv = malloc(sizeof(egigaPriv)); if (!priv) { printf("%s: %s falied to alloc egiga_priv (error)\n", __func__, name); goto error; } memset(priv, 0, sizeof(egigaPriv)); /* init device methods */ memcpy(dev->name, name, NAMESIZE); mvMacStrToHex(enet_addr, (MV_U8 *)(dev->enetaddr)); dev->init = (void *)mvEgigaInit; dev->halt = (void *)mvEgigaHalt; dev->send = (void *)mvEgigaTx; dev->recv = (void *)mvEgigaRx; dev->priv = priv; dev->iobase = 0; dev->write_hwaddr = 0; priv->port = port; priv->devInit = MV_FALSE; priv->devEnable = MV_FALSE; /* register the interface */ eth_register(dev); return 0; error: printf("%s: %s load failed\n", __func__, name); if (priv) free(dev->priv); if (dev) free(dev); return -1; }
/* this function call nfp_mgr_functions, and print debug messeges */ int do_arp_add_del_age(const char *name, int family, unsigned char *gtw, char *macStr) { MV_U8 mac[MV_MAC_ADDR_SIZE]; if (!strcmp(name, "arp_add")) { mvMacStrToHex(macStr, mac); NFP_SYSFS_DBG(print_arp_add(family, gtw, mac)); nfp_arp_add(family, gtw, mac); } else { if (!strcmp(name, "arp_del")) { NFP_SYSFS_DBG(print_arp_del_age(family, gtw, "del")); nfp_arp_del(family, gtw); } else { NFP_SYSFS_DBG(print_arp_del_age(family, gtw, "age")); printk(KERN_INFO "age: %d\n", nfp_arp_age(family, gtw)); } } return 0; }
static int mv_gtw_get_cmdline_mac_addr(char **p_net_config, int idx) { /* the MAC address should look like: 00:99:88:88:99:77 */ /* that is, 6 two-digit numbers, separated by : */ /* 6 times two-digits, plus 5 colons, total: 17 characters */ const int exact_len = 17; int i = 0; int syntax_err = 0; char *p_mac_addr = *p_net_config; /* check first 15 characters in groups of 3 characters at a time */ for (i = 0; i < exact_len-2; i+=3) { if ( (mv_gtw_is_digit(**p_net_config) == 0) && (mv_gtw_is_digit(*(*p_net_config+1)) == 0) && ((*(*p_net_config+2)) == ':') ) { (*p_net_config) += 3; } else { syntax_err = 1; break; } } /* two characters remaining, must be two digits */ if ( (mv_gtw_is_digit(**p_net_config) == 0) && (mv_gtw_is_digit(*(*p_net_config+1)) == 0) ) { (*p_net_config) += 2; } else syntax_err = 1; if (syntax_err == 0) { mvMacStrToHex(p_mac_addr, gtw_config.vlan_cfg[idx].macaddr); return 0; } printk("Syntax error while parsing MAC address from command line\n"); return -EINVAL; }