- Port *port = 0;
- if(sport && dport)
- {
- if(sport->is_registered()!=dport->is_registered())
- {
- if(sport->is_registered())
- port = sport;
- else
- port = dport;
- }
- else if(sport->get_number()<dport->get_number())
- port = sport;
- else
- port = dport;
- }
- else
- port = &self->get_port(0);
+void NetVis::handle_ipv6(CaptureContext &ctx, const ip6_hdr *ip6, unsigned len)
+{
+ ctx.src_host = &get_host(ip6->ip6_src);
+ if(!IN6_IS_ADDR_MULTICAST(ip6->ip6_dst.s6_addr))
+ ctx.dst_host = &get_host(ip6->ip6_dst);
+
+ if(ip6->ip6_nxt==IPPROTO_TCP)
+ {
+ const tcphdr *tcp = reinterpret_cast<const tcphdr *>(ip6+1);
+ handle_tcp(ctx, tcp, len-sizeof(ip6_hdr));
+ }
+ else if(ip6->ip6_nxt==IPPROTO_UDP)
+ {
+ const udphdr *udp = reinterpret_cast<const udphdr *>(ip6+1);
+ handle_udp(ctx, udp, len-sizeof(ip6_hdr));
+ }
+ else if(ip6->ip6_nxt==IPPROTO_ICMPV6)
+ {
+ const icmp6_hdr *icmp6 = reinterpret_cast<const icmp6_hdr *>(ip6+1);
+ handle_icmp6(ctx, icmp6, len-sizeof(ip6_hdr));
+ }
+ else
+ IO::print("Unknown next header in ip6: %d\n", ip6->ip6_nxt);
+}