コード例 #1
0
ファイル: track.c プロジェクト: vpereira/libpeak
static void
test_track(void)
{
	struct peak_tracks *tracker;
	struct peak_packet packet;
	struct netaddr usr1, usr2;
	struct peak_track _flow;
	struct peak_track *flow;

	memset(&packet, 0, sizeof(packet));

	netaddr4(&usr1, 0);
	netaddr4(&usr2, 1);

	tracker = peak_track_init(2);
	assert(tracker);

	packet.net_saddr = usr1;
	packet.net_daddr = usr2;
	packet.flow_sport = 80;
	packet.flow_dport = 51000;
	TRACK_KEY(&_flow, &packet);
	flow = peak_track_acquire(tracker, &_flow);

	assert(flow);
	assert(flow == peak_track_acquire(tracker, &_flow));
	assert(flow == peak_track_acquire(tracker, flow));

	packet.net_saddr = usr2;
	packet.net_daddr = usr1;
	packet.flow_sport = 51000;
	packet.flow_dport = 80;
	TRACK_KEY(&_flow, &packet);
	assert(flow == peak_track_acquire(tracker, &_flow));

	packet.net_saddr = usr1;
	packet.net_daddr = usr2;
	packet.flow_sport = 51000;
	packet.flow_dport = 80;
	TRACK_KEY(&_flow, &packet);
	assert(flow != peak_track_acquire(tracker, &_flow));

	packet.net_saddr = usr1;
	packet.net_daddr = usr2;
	packet.flow_sport = 51000;
	packet.flow_dport = 80;
	packet.net_type = 1;
	TRACK_KEY(&_flow, &packet);
	assert(peak_track_acquire(tracker, &_flow));

	peak_track_exit(tracker);
}
コード例 #2
0
ファイル: peek.c プロジェクト: dassencio/libpeak
static void
peek_packet(struct peak_tracks *peek, const timeslice_t *timer,
    void *buf, unsigned int len, unsigned int type)
{
	struct peak_packet stackptr(packet);
	struct peak_track *flow;
	struct peak_track _flow;

	if (peak_packet_parse(packet, buf, len, type) || !packet->net_len) {
		/* here be dragons */
		return;
	}

	TRACK_KEY(&_flow, packet);

	flow = peak_track_acquire(peek, &_flow);
	if (!flow) {
		panic("tracker is empty\n");
	}

	{
		const unsigned int dir =
		    !!netcmp(&packet->net_saddr, &flow->addr[LOWER]);

		if (!flow->li[dir]) {
			flow->li[dir] = peak_li_get(packet);
		}
	}

	peek_report(packet, flow, timer);
}