+ checksum = inet_checksum(&ns, ns_size, checksum);
+ checksum = inet_checksum(&opt, opt_size, checksum);
+ checksum = inet_checksum(packet->data + ether_size + ip6_size + ns_size + opt_size, ETH_ALEN, checksum);
+
+ ns.nd_ns_hdr.icmp6_cksum = checksum;
+
+ /* Copy structs on stack back to packet */
+
+ memcpy(packet->data + ether_size, &ip6, ip6_size);
+ memcpy(packet->data + ether_size + ip6_size, &ns, ns_size);
+ memcpy(packet->data + ether_size + ip6_size + ns_size, &opt, opt_size);
+
+ send_packet(source, packet);
+}
+
+static __inline__ void route_ipv6(node_t *source, vpn_packet_t *packet)
+{
+ cp();
+
+ if(!checklength(source, packet, ether_size + ip6_size))
+ return;