/* * netsniff-ng - the packet sniffing beast * Copyright 2009, 2010 Daniel Borkmann. * Copyright 2010 Emmanuel Roullit. * Subject to the GPL, version 2. */ #include #include #include /* for ntohs() */ #include /* for inet_ntop() */ #include "proto.h" #include "dissector_eth.h" #include "ipv6.h" #include "geoip.h" #include "pkt_buff.h" extern void ipv6(struct pkt_buff *pkt); extern void ipv6_less(struct pkt_buff *pkt); void ipv6(struct pkt_buff *pkt) { uint8_t traffic_class; uint32_t flow_label; char src_ip[INET6_ADDRSTRLEN]; char dst_ip[INET6_ADDRSTRLEN]; struct ipv6hdr *ip = (struct ipv6hdr *) pkt_pull(pkt, sizeof(*ip)); struct sockaddr_in6 sas, sad; const char *city, *region, *country; if (ip == NULL) return; traffic_class = (ip->priority << 4) | ((ip->flow_lbl[0] & 0xF0) >> 4); flow_label = ((ip->flow_lbl[0] & 0x0F) << 8) | (ip->flow_lbl[1] << 4) | ip->flow_lbl[2]; inet_ntop(AF_INET6, &ip->saddr, src_ip, sizeof(src_ip)); inet_ntop(AF_INET6, &ip->daddr, dst_ip, sizeof(dst_ip)); tprintf(" [ IPv6 "); tprintf("Addr (%s => %s), ", src_ip, dst_ip); tprintf("Version (%u), ", ip->version); tprintf("TrafficClass (%u), ", traffic_class); tprintf("FlowLabel (%u), ", flow_label); tprintf("Len (%u), ", ntohs(ip->payload_len)); tprintf("NextHdr (%u), ", ip->nexthdr); tprintf("HopLimit (%u)", ip->hop_limit); tprintf(" ]\n"); memset(&sas, 0, sizeof(sas)); sas.sin6_family = PF_INET6; memcpy(&sas.sin6_addr, &ip->saddr, sizeof(ip->saddr)); memset(&sad, 0, sizeof(sad)); sad.sin6_family = PF_INET6; memcpy(&sad.sin6_addr, &ip->daddr, sizeof(ip->daddr)); if (geoip_working()) { tprintf("\t[ Geo ("); if ((country = geoip6_country_name(&sas))) { tprintf("%s", country); if ((region = geoip6_region_name(&sas))) tprintf(" / %s", region); if ((city = geoip6_city_name(&sas))) tprintf(" / %s", city); } else { tprintf("local"); } tprintf(" => "); if ((country = geoip6_country_name(&sad))) { tprintf("%s", country); if ((region = geoip6_region_name(&sad))) tprintf(" / %s", region); if ((city = geoip6_city_name(&sad))) tprintf(" / %s", city); } else { tprintf("local"); } tprintf(") ]\n"); } pkt_set_dissector(pkt, ð_lay3, ip->nexthdr); } void ipv6_less(struct pkt_buff *pkt) { char src_ip[INET6_ADDRSTRLEN]; char dst_ip[INET6_ADDRSTRLEN]; struct ipv6hdr *ip = (struct ipv6hdr *) pkt_pull(pkt, sizeof(*ip)); if (ip == NULL) return; inet_ntop(AF_INET6, &ip->saddr, src_ip, sizeof(src_ip)); inet_ntop(AF_INET6, &ip->daddr, dst_ip, sizeof(dst_ip)); tprintf(" %s/%s Len %u", src_ip, dst_ip, ntohs(ip->payload_len)); pkt_set_dissector(pkt, ð_lay3, ip->nexthdr); } struct protocol ipv6_ops = { .key = 0x86DD, .print_full = ipv6, .print_less = ipv6_less, }; ' name='h' value='nds-private-remove'/>
context:
space:
mode:
authorBoris Ostrovsky <boris.ostrovsky@oracle.com>2017-01-30 12:45:46 -0500
committerDavid S. Miller <davem@davemloft.net>2017-02-10 13:44:49 -0500
commit74470954857c264168d2b5a113904cf0cfd27d18 (patch)
tree24385081f1db3e70506265c9e8da6f2ad03752ec
parent7ba1b689038726d34e3244c1ac9e2e18c2ea4787 (diff)
xen-netfront: Delete rx_refill_timer in xennet_disconnect_backend()
rx_refill_timer should be deleted as soon as we disconnect from the backend since otherwise it is possible for the timer to go off before we get to xennet_destroy_queues(). If this happens we may dereference queue->rx.sring which is set to NULL in xennet_disconnect_backend(). Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> CC: stable@vger.kernel.org Reviewed-by: Juergen Gross <jgross@suse.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/xen-netfront.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c