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 d41d88b53e18..379270f14771 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -1420,11 +1420,6 @@ static ssize_t pktgen_if_write(struct file *file, | |||
1420 | return count; | 1420 | return count; |
1421 | } | 1421 | } |
1422 | if (!strcmp(name, "dst_mac")) { | 1422 | if (!strcmp(name, "dst_mac")) { |
1423 | char *v = valstr; | ||
1424 | unsigned char old_dmac[ETH_ALEN]; | ||
1425 | unsigned char *m = pkt_dev->dst_mac; | ||
1426 | memcpy(old_dmac, pkt_dev->dst_mac, ETH_ALEN); | ||
1427 | |||
1428 | len = strn_len(&user_buffer[i], sizeof(valstr) - 1); | 1423 | len = strn_len(&user_buffer[i], sizeof(valstr) - 1); |
1429 | if (len < 0) | 1424 | if (len < 0) |
1430 | return len; | 1425 | return len; |
@@ -1432,35 +1427,16 @@ static ssize_t pktgen_if_write(struct file *file, | |||
1432 | memset(valstr, 0, sizeof(valstr)); | 1427 | memset(valstr, 0, sizeof(valstr)); |
1433 | if (copy_from_user(valstr, &user_buffer[i], len)) | 1428 | if (copy_from_user(valstr, &user_buffer[i], len)) |
1434 | return -EFAULT; | 1429 | return -EFAULT; |
1435 | i += len; | ||
1436 | |||
1437 | for (*m = 0; *v && m < pkt_dev->dst_mac + 6; v++) { | ||
1438 | int value; | ||
1439 | |||
1440 | value = hex_to_bin(*v); | ||
1441 | if (value >= 0) | ||
1442 | *m = *m * 16 + value; | ||
1443 | |||
1444 | if (*v == ':') { | ||
1445 | m++; | ||
1446 | *m = 0; | ||
1447 | } | ||
1448 | } | ||
1449 | 1430 | ||
1431 | if (!mac_pton(valstr, pkt_dev->dst_mac)) | ||
1432 | return -EINVAL; | ||
1450 | /* Set up Dest MAC */ | 1433 | /* Set up Dest MAC */ |
1451 | if (compare_ether_addr(old_dmac, pkt_dev->dst_mac)) | 1434 | memcpy(&pkt_dev->hh[0], pkt_dev->dst_mac, ETH_ALEN); |
1452 | memcpy(&(pkt_dev->hh[0]), pkt_dev->dst_mac, ETH_ALEN); | ||
1453 | 1435 | ||
1454 | sprintf(pg_result, "OK: dstmac"); | 1436 | sprintf(pg_result, "OK: dstmac %pM", pkt_dev->dst_mac); |
1455 | return count; | 1437 | return count; |
1456 | } | 1438 | } |
1457 | if (!strcmp(name, "src_mac")) { | 1439 | if (!strcmp(name, "src_mac")) { |
1458 | char *v = valstr; | ||
1459 | unsigned char old_smac[ETH_ALEN]; | ||
1460 | unsigned char *m = pkt_dev->src_mac; | ||
1461 | |||
1462 | memcpy(old_smac, pkt_dev->src_mac, ETH_ALEN); | ||
1463 | |||
1464 | len = strn_len(&user_buffer[i], sizeof(valstr) - 1); | 1440 | len = strn_len(&user_buffer[i], sizeof(valstr) - 1); |
1465 | if (len < 0) | 1441 | if (len < 0) |
1466 | return len; | 1442 | return len; |
@@ -1468,26 +1444,13 @@ static ssize_t pktgen_if_write(struct file *file, | |||
1468 | memset(valstr, 0, sizeof(valstr)); | 1444 | memset(valstr, 0, sizeof(valstr)); |
1469 | if (copy_from_user(valstr, &user_buffer[i], len)) | 1445 | if (copy_from_user(valstr, &user_buffer[i], len)) |
1470 | return -EFAULT; | 1446 | return -EFAULT; |
1471 | i += len; | ||
1472 | |||
1473 | for (*m = 0; *v && m < pkt_dev->src_mac + 6; v++) { | ||
1474 | int value; | ||
1475 | |||
1476 | value = hex_to_bin(*v); | ||
1477 | if (value >= 0) | ||
1478 | *m = *m * 16 + value; | ||
1479 | |||
1480 | if (*v == ':') { | ||
1481 | m++; | ||
1482 | *m = 0; | ||
1483 | } | ||
1484 | } | ||
1485 | 1447 | ||
1448 | if (!mac_pton(valstr, pkt_dev->src_mac)) | ||
1449 | return -EINVAL; | ||
1486 | /* Set up Src MAC */ | 1450 | /* Set up Src MAC */ |
1487 | if (compare_ether_addr(old_smac, pkt_dev->src_mac)) | 1451 | memcpy(&pkt_dev->hh[6], pkt_dev->src_mac, ETH_ALEN); |
1488 | memcpy(&(pkt_dev->hh[6]), pkt_dev->src_mac, ETH_ALEN); | ||
1489 | 1452 | ||
1490 | sprintf(pg_result, "OK: srcmac"); | 1453 | sprintf(pg_result, "OK: srcmac %pM", pkt_dev->src_mac); |
1491 | return count; | 1454 | return count; |
1492 | } | 1455 | } |
1493 | 1456 | ||