Committed by
Gerrit Code Review
Add IPv6 support to Ethernet.toString()
Change-Id: I392b63cee0742ebdd469a6782899184f3086a817
Showing
1 changed file
with
112 additions
and
19 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(); |
535 | - sb.append("\ntp_src: "); | 541 | + if (payload != null) { |
536 | - sb.append(((TCP) pkt).getSourcePort()); | 542 | + if (payload instanceof TCP) { |
537 | - sb.append("\ntp_dst: "); | 543 | + sb.append("\ntp_src: "); |
538 | - sb.append(((TCP) pkt).getDestinationPort()); | 544 | + sb.append(((TCP) payload).getSourcePort()); |
539 | - | 545 | + sb.append("\ntp_dst: "); |
540 | - } else if (pkt instanceof UDP) { | 546 | + sb.append(((TCP) payload).getDestinationPort()); |
541 | - sb.append("\ntp_src: "); | 547 | + |
542 | - sb.append(((UDP) pkt).getSourcePort()); | 548 | + } else if (payload instanceof UDP) { |
543 | - sb.append("\ntp_dst: "); | 549 | + sb.append("\ntp_src: "); |
544 | - sb.append(((UDP) pkt).getDestinationPort()); | 550 | + sb.append(((UDP) payload).getSourcePort()); |
551 | + sb.append("\ntp_dst: "); | ||
552 | + sb.append(((UDP) payload).getDestinationPort()); | ||
553 | + } else if (payload instanceof ICMP) { | ||
554 | + final ICMP icmp = (ICMP) payload; | ||
555 | + sb.append("\nicmp_type: "); | ||
556 | + sb.append(icmp.getIcmpType()); | ||
557 | + sb.append("\nicmp_code: "); | ||
558 | + sb.append(icmp.getIcmpCode()); | ||
559 | + } | ||
545 | } | 560 | } |
546 | - | 561 | + } else if (pkt instanceof IPv6) { |
547 | - if (pkt instanceof ICMP) { | 562 | + final IPv6 ipv6 = (IPv6) pkt; |
548 | - final ICMP icmp = (ICMP) pkt; | 563 | + sb.append("\nipv6_src: "); |
549 | - sb.append("\nicmp_type: "); | 564 | + sb.append(Ip6Address.valueOf(ipv6.getSourceAddress()).toString()); |
550 | - sb.append(icmp.getIcmpType()); | 565 | + sb.append("\nipv6_dst: "); |
551 | - sb.append("\nicmp_code: "); | 566 | + sb.append(Ip6Address.valueOf(ipv6.getDestinationAddress()).toString()); |
552 | - sb.append(icmp.getIcmpCode()); | 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 | + } | ||
553 | } | 647 | } |
554 | - | ||
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