155714Skris/* $FreeBSD$ */ 2280297Sjkim 3280297Sjkim/* 4280297Sjkim * Copyright (C) 2012 by Darren Reed. 555714Skris * 655714Skris * See the IPFILTER.LICENCE file for details on licencing. 755714Skris * 855714Skris * $Id$ 955714Skris */ 1055714Skris 1155714Skris#include "ipf.h" 1255714Skris 1355714Skris/* 14280297Sjkim * This is meant to work without the IPv6 header files being present or 1555714Skris * the inet_ntop() library. 1655714Skris */ 1755714Skrisvoid 1855714Skrisprintpacket6(dir, m) 1955714Skris int dir; 2055714Skris mb_t *m; 2155714Skris{ 2255714Skris u_char *buf, p; 2355714Skris u_short plen, *addrs; 2455714Skris tcphdr_t *tcp; 2555714Skris u_32_t flow; 2655714Skris 2755714Skris buf = (u_char *)m->mb_data; 2855714Skris tcp = (tcphdr_t *)(buf + 40); 2955714Skris p = buf[6]; 3055714Skris flow = ntohl(*(u_32_t *)buf); 3155714Skris flow &= 0xfffff; 3255714Skris plen = ntohs(*((u_short *)buf +2)); 3355714Skris addrs = (u_short *)buf + 4; 3455714Skris 3555714Skris if (dir) 3655714Skris PRINTF("> "); 3755714Skris else 3855714Skris PRINTF("< "); 3955714Skris 4055714Skris PRINTF("%s ", IFNAME(m->mb_ifp)); 4155714Skris 4255714Skris PRINTF("ip6/%d %d %#x %d", buf[0] & 0xf, plen, flow, p); 4355714Skris PRINTF(" %x:%x:%x:%x:%x:%x:%x:%x", 4455714Skris ntohs(addrs[0]), ntohs(addrs[1]), ntohs(addrs[2]), 4555714Skris ntohs(addrs[3]), ntohs(addrs[4]), ntohs(addrs[5]), 4655714Skris ntohs(addrs[6]), ntohs(addrs[7])); 4755714Skris if (plen >= 4) 4855714Skris if (p == IPPROTO_TCP || p == IPPROTO_UDP) 4955714Skris (void)PRINTF(",%d", ntohs(tcp->th_sport)); 5055714Skris PRINTF(" >"); 5155714Skris addrs += 8; 5255714Skris PRINTF(" %x:%x:%x:%x:%x:%x:%x:%x", 5355714Skris ntohs(addrs[0]), ntohs(addrs[1]), ntohs(addrs[2]), 5455714Skris ntohs(addrs[3]), ntohs(addrs[4]), ntohs(addrs[5]), 5555714Skris ntohs(addrs[6]), ntohs(addrs[7])); 5655714Skris if (plen >= 4) 5755714Skris if (p == IPPROTO_TCP || p == IPPROTO_UDP) 5855714Skris PRINTF(",%d", ntohs(tcp->th_dport)); 5955714Skris putchar('\n'); 6055714Skris} 6155714Skris