Committed by
Gerrit Code Review
Add IPv6 support to Ethernet.toString()
Change-Id: I392b63cee0742ebdd469a6782899184f3086a817
Showing
1 changed file
with
104 additions
and
11 deletions
| ... | @@ -18,6 +18,12 @@ | ... | @@ -18,6 +18,12 @@ |
| 18 | 18 | ||
| 19 | package org.onlab.packet; | 19 | package org.onlab.packet; |
| 20 | 20 | ||
| 21 | +import org.onlab.packet.ndp.NeighborAdvertisement; | ||
| 22 | +import org.onlab.packet.ndp.NeighborSolicitation; | ||
| 23 | +import org.onlab.packet.ndp.Redirect; | ||
| 24 | +import org.onlab.packet.ndp.RouterAdvertisement; | ||
| 25 | +import org.onlab.packet.ndp.RouterSolicitation; | ||
| 26 | + | ||
| 21 | import java.nio.ByteBuffer; | 27 | import java.nio.ByteBuffer; |
| 22 | import java.util.Arrays; | 28 | import java.util.Arrays; |
| 23 | import java.util.HashMap; | 29 | import java.util.HashMap; |
| ... | @@ -531,27 +537,114 @@ public class Ethernet extends BasePacket { | ... | @@ -531,27 +537,114 @@ public class Ethernet extends BasePacket { |
| 531 | sb.append("\nnw_proto: "); | 537 | sb.append("\nnw_proto: "); |
| 532 | sb.append(p.getProtocol()); | 538 | sb.append(p.getProtocol()); |
| 533 | 539 | ||
| 534 | - if (pkt instanceof TCP) { | 540 | + IPacket payload = pkt.getPayload(); |
| 541 | + if (payload != null) { | ||
| 542 | + if (payload instanceof TCP) { | ||
| 535 | sb.append("\ntp_src: "); | 543 | sb.append("\ntp_src: "); |
| 536 | - sb.append(((TCP) pkt).getSourcePort()); | 544 | + sb.append(((TCP) payload).getSourcePort()); |
| 537 | sb.append("\ntp_dst: "); | 545 | sb.append("\ntp_dst: "); |
| 538 | - sb.append(((TCP) pkt).getDestinationPort()); | 546 | + sb.append(((TCP) payload).getDestinationPort()); |
| 539 | 547 | ||
| 540 | - } else if (pkt instanceof UDP) { | 548 | + } else if (payload instanceof UDP) { |
| 541 | sb.append("\ntp_src: "); | 549 | sb.append("\ntp_src: "); |
| 542 | - sb.append(((UDP) pkt).getSourcePort()); | 550 | + sb.append(((UDP) payload).getSourcePort()); |
| 543 | sb.append("\ntp_dst: "); | 551 | sb.append("\ntp_dst: "); |
| 544 | - sb.append(((UDP) pkt).getDestinationPort()); | 552 | + sb.append(((UDP) payload).getDestinationPort()); |
| 545 | - } | 553 | + } else if (payload instanceof ICMP) { |
| 546 | - | 554 | + final ICMP icmp = (ICMP) payload; |
| 547 | - if (pkt instanceof ICMP) { | ||
| 548 | - final ICMP icmp = (ICMP) pkt; | ||
| 549 | sb.append("\nicmp_type: "); | 555 | sb.append("\nicmp_type: "); |
| 550 | sb.append(icmp.getIcmpType()); | 556 | sb.append(icmp.getIcmpType()); |
| 551 | sb.append("\nicmp_code: "); | 557 | sb.append("\nicmp_code: "); |
| 552 | sb.append(icmp.getIcmpCode()); | 558 | sb.append(icmp.getIcmpCode()); |
| 553 | } | 559 | } |
| 554 | - | 560 | + } |
| 561 | + } else if (pkt instanceof IPv6) { | ||
| 562 | + final IPv6 ipv6 = (IPv6) pkt; | ||
| 563 | + sb.append("\nipv6_src: "); | ||
| 564 | + sb.append(Ip6Address.valueOf(ipv6.getSourceAddress()).toString()); | ||
| 565 | + sb.append("\nipv6_dst: "); | ||
| 566 | + sb.append(Ip6Address.valueOf(ipv6.getDestinationAddress()).toString()); | ||
| 567 | + sb.append("\nipv6_proto: "); | ||
| 568 | + sb.append(ipv6.getNextHeader()); | ||
| 569 | + | ||
| 570 | + IPacket payload = pkt.getPayload(); | ||
| 571 | + if (payload != null && payload instanceof ICMP6) { | ||
| 572 | + final ICMP6 icmp6 = (ICMP6) payload; | ||
| 573 | + sb.append("\nicmp6_type: "); | ||
| 574 | + sb.append(icmp6.getIcmpType()); | ||
| 575 | + sb.append("\nicmp6_code: "); | ||
| 576 | + sb.append(icmp6.getIcmpCode()); | ||
| 577 | + | ||
| 578 | + payload = payload.getPayload(); | ||
| 579 | + if (payload != null) { | ||
| 580 | + if (payload instanceof NeighborSolicitation) { | ||
| 581 | + final NeighborSolicitation ns = (NeighborSolicitation) payload; | ||
| 582 | + sb.append("\nns_target_addr: "); | ||
| 583 | + sb.append(Ip6Address.valueOf(ns.getTargetAddress()).toString()); | ||
| 584 | + ns.getOptions().forEach(option -> { | ||
| 585 | + sb.append("\noption_type: "); | ||
| 586 | + sb.append(option.type()); | ||
| 587 | + sb.append("\noption_data: "); | ||
| 588 | + sb.append(bytesToHex(option.data())); | ||
| 589 | + }); | ||
| 590 | + } else if (payload instanceof NeighborAdvertisement) { | ||
| 591 | + final NeighborAdvertisement na = (NeighborAdvertisement) payload; | ||
| 592 | + sb.append("\nna_target_addr: "); | ||
| 593 | + sb.append(Ip6Address.valueOf(na.getTargetAddress()).toString()); | ||
| 594 | + sb.append("\nna_solicited_flag: "); | ||
| 595 | + sb.append(na.getSolicitedFlag()); | ||
| 596 | + sb.append("\nna_router_flag: "); | ||
| 597 | + sb.append(na.getRouterFlag()); | ||
| 598 | + sb.append("\nna_override_flag: "); | ||
| 599 | + sb.append(na.getOverrideFlag()); | ||
| 600 | + na.getOptions().forEach(option -> { | ||
| 601 | + sb.append("\noption_type: "); | ||
| 602 | + sb.append(option.type()); | ||
| 603 | + sb.append("\noption_data: "); | ||
| 604 | + sb.append(bytesToHex(option.data())); | ||
| 605 | + }); | ||
| 606 | + } else if (payload instanceof RouterSolicitation) { | ||
| 607 | + final RouterSolicitation rs = (RouterSolicitation) payload; | ||
| 608 | + sb.append("\nrs"); | ||
| 609 | + rs.getOptions().forEach(option -> { | ||
| 610 | + sb.append("\noption_type: "); | ||
| 611 | + sb.append(option.type()); | ||
| 612 | + sb.append("\noption_data: "); | ||
| 613 | + sb.append(bytesToHex(option.data())); | ||
| 614 | + }); | ||
| 615 | + } else if (payload instanceof RouterAdvertisement) { | ||
| 616 | + final RouterAdvertisement ra = (RouterAdvertisement) payload; | ||
| 617 | + sb.append("\nra_hop_limit: "); | ||
| 618 | + sb.append(ra.getCurrentHopLimit()); | ||
| 619 | + sb.append("\nra_mflag: "); | ||
| 620 | + sb.append(ra.getMFlag()); | ||
| 621 | + sb.append("\nra_oflag: "); | ||
| 622 | + sb.append(ra.getOFlag()); | ||
| 623 | + sb.append("\nra_reachable_time: "); | ||
| 624 | + sb.append(ra.getReachableTime()); | ||
| 625 | + sb.append("\nra_retransmit_time: "); | ||
| 626 | + sb.append(ra.getRetransmitTimer()); | ||
| 627 | + sb.append("\nra_router_lifetime: "); | ||
| 628 | + sb.append(ra.getRouterLifetime()); | ||
| 629 | + ra.getOptions().forEach(option -> { | ||
| 630 | + sb.append("\noption_type: "); | ||
| 631 | + sb.append(option.type()); | ||
| 632 | + sb.append("\noption_data: "); | ||
| 633 | + sb.append(bytesToHex(option.data())); | ||
| 634 | + }); | ||
| 635 | + } else if (payload instanceof Redirect) { | ||
| 636 | + final Redirect rd = (Redirect) payload; | ||
| 637 | + sb.append("\nrd_target_addr: "); | ||
| 638 | + sb.append(Ip6Address.valueOf(rd.getTargetAddress()).toString()); | ||
| 639 | + rd.getOptions().forEach(option -> { | ||
| 640 | + sb.append("\noption_type: "); | ||
| 641 | + sb.append(option.type()); | ||
| 642 | + sb.append("\noption_data: "); | ||
| 643 | + sb.append(bytesToHex(option.data())); | ||
| 644 | + }); | ||
| 645 | + } | ||
| 646 | + } | ||
| 647 | + } | ||
| 555 | } else if (pkt instanceof DHCP) { | 648 | } else if (pkt instanceof DHCP) { |
| 556 | sb.append("\ndhcp packet"); | 649 | sb.append("\ndhcp packet"); |
| 557 | } else if (pkt instanceof Data) { | 650 | } else if (pkt instanceof Data) { | ... | ... |
-
Please register or login to post a comment