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