Пример #1
0
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);
    }
}
Пример #2
0
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;
}
Пример #4
0
/* 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;
}
Пример #5
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;
}