diff options
Diffstat (limited to 'net/core/pktgen.c')
| -rw-r--r-- | net/core/pktgen.c | 53 | 
1 files changed, 8 insertions, 45 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index d41d88b53e1..379270f1477 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -1420,11 +1420,6 @@ static ssize_t pktgen_if_write(struct file *file,  		return count;  	}  	if (!strcmp(name, "dst_mac")) { -		char *v = valstr; -		unsigned char old_dmac[ETH_ALEN]; -		unsigned char *m = pkt_dev->dst_mac; -		memcpy(old_dmac, pkt_dev->dst_mac, ETH_ALEN); -  		len = strn_len(&user_buffer[i], sizeof(valstr) - 1);  		if (len < 0)  			return len; @@ -1432,35 +1427,16 @@ static ssize_t pktgen_if_write(struct file *file,  		memset(valstr, 0, sizeof(valstr));  		if (copy_from_user(valstr, &user_buffer[i], len))  			return -EFAULT; -		i += len; - -		for (*m = 0; *v && m < pkt_dev->dst_mac + 6; v++) { -			int value; - -			value = hex_to_bin(*v); -			if (value >= 0) -				*m = *m * 16 + value; - -			if (*v == ':') { -				m++; -				*m = 0; -			} -		} +		if (!mac_pton(valstr, pkt_dev->dst_mac)) +			return -EINVAL;  		/* Set up Dest MAC */ -		if (compare_ether_addr(old_dmac, pkt_dev->dst_mac)) -			memcpy(&(pkt_dev->hh[0]), pkt_dev->dst_mac, ETH_ALEN); +		memcpy(&pkt_dev->hh[0], pkt_dev->dst_mac, ETH_ALEN); -		sprintf(pg_result, "OK: dstmac"); +		sprintf(pg_result, "OK: dstmac %pM", pkt_dev->dst_mac);  		return count;  	}  	if (!strcmp(name, "src_mac")) { -		char *v = valstr; -		unsigned char old_smac[ETH_ALEN]; -		unsigned char *m = pkt_dev->src_mac; - -		memcpy(old_smac, pkt_dev->src_mac, ETH_ALEN); -  		len = strn_len(&user_buffer[i], sizeof(valstr) - 1);  		if (len < 0)  			return len; @@ -1468,26 +1444,13 @@ static ssize_t pktgen_if_write(struct file *file,  		memset(valstr, 0, sizeof(valstr));  		if (copy_from_user(valstr, &user_buffer[i], len))  			return -EFAULT; -		i += len; - -		for (*m = 0; *v && m < pkt_dev->src_mac + 6; v++) { -			int value; - -			value = hex_to_bin(*v); -			if (value >= 0) -				*m = *m * 16 + value; - -			if (*v == ':') { -				m++; -				*m = 0; -			} -		} +		if (!mac_pton(valstr, pkt_dev->src_mac)) +			return -EINVAL;  		/* Set up Src MAC */ -		if (compare_ether_addr(old_smac, pkt_dev->src_mac)) -			memcpy(&(pkt_dev->hh[6]), pkt_dev->src_mac, ETH_ALEN); +		memcpy(&pkt_dev->hh[6], pkt_dev->src_mac, ETH_ALEN); -		sprintf(pg_result, "OK: srcmac"); +		sprintf(pg_result, "OK: srcmac %pM", pkt_dev->src_mac);  		return count;  	}  |