summaryrefslogtreecommitdiff
path: root/proto_ipv6_fragm.c
blob: 568a89703d9ee88a410dcdd3f91f132ccdf8ae49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
 * netsniff-ng - the packet sniffing beast
 * Copyright 2012 Markus Amend <markus@netsniff-ng.org>, Deutsche Flugsicherung GmbH
 * Subject to the GPL, version 2.
 *
 * IPv6 Fragmentation Header described in RFC2460
 */

#include <stdio.h>
#include <stdint.h>
#include <netinet/in.h>    /* for ntohs() */

#include "proto.h"
#include "protos.h"
#include "dissector_eth.h"
#include "built_in.h"
#include "pkt_buff.h"

struct fragmhdr {
	uint8_t h_fragm_next_header;
	uint8_t h_fragm_reserved;
	uint16_t h_fragm_off_res_M;	
	uint32_t h_fragm_identification;
} __packed;

static void fragm(struct pkt_buff *pkt)
{
	uint16_t off_res_M;
	struct fragmhdr *fragm_ops;

	fragm_ops = (struct fragmhdr *) pkt_pull(pkt, sizeof(*fragm_ops));
	if (fragm_ops == NULL)
		return;

	off_res_M = ntohs(fragm_ops->h_fragm_off_res_M);
	
	tprintf("\t [ Fragment ");
	tprintf("NextHdr (%u), ", fragm_ops->h_fragm_next_header);
	tprintf("Reserved (%u), ", fragm_ops->h_fragm_reserved);
	tprintf("Offset (%u), ", off_res_M >> 3);
	tprintf("Res (%u), ", (off_res_M >> 1) & 0x3);
	tprintf("M flag (%u), ", off_res_M & 0x1);
	tprintf("Identification (%u)",
		ntohl(fragm_ops->h_fragm_identification));
	tprintf(" ]\n");

	pkt_set_proto(pkt, &eth_lay3, fragm_ops->h_fragm_next_header);
}

static void fragm_less(struct pkt_buff *pkt)
{
	uint16_t off_res_M;
	struct fragmhdr *fragm_ops;

	fragm_ops = (struct fragmhdr *) pkt_pull(pkt, sizeof(*fragm_ops));
	if (fragm_ops == NULL)
		return;

	off_res_M = ntohs(fragm_ops->h_fragm_off_res_M);

	tprintf(" FragmOffs %u", off_res_M >> 3);

	pkt_set_proto(pkt, &eth_lay3, fragm_ops->h_fragm_next_header);
}

struct protocol ipv6_fragm_ops = {
	.key = 0x2C,
	.print_full = fragm,
	.print_less = fragm_less,
};
persistent-data - a couple changes to prepare for multipage biovec support in the block layer - various improvements and cleanups in the DM core, DM cache, DM raid and DM crypt - add ability to have DM crypt use keys from the kernel key retention service - add a new "error_writes" feature to the DM flakey target, reads are left unchanged in this mode * tag 'dm-4.10-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: (40 commits) dm flakey: introduce "error_writes" feature dm cache policy smq: use hash_32() instead of hash_32_generic() dm crypt: reject key strings containing whitespace chars dm space map: always set ev if sm_ll_mutate() succeeds dm space map metadata: skip useless memcpy in metadata_ll_init_index() dm space map metadata: fix 'struct sm_metadata' leak on failed create Documentation: dm raid: define data_offset status field dm raid: fix discard support regression dm raid: don't allow "write behind" with raid4/5/6 dm mpath: use hw_handler_params if attached hw_handler is same as requested dm crypt: add ability to use keys from the kernel key retention service dm array: remove a dead assignment in populate_ablock_with_values() dm ioctl: use offsetof() instead of open-coding it dm rq: simplify use_blk_mq initialization dm: use blk_set_queue_dying() in __dm_destroy() dm bufio: drop the lock when doing GFP_NOIO allocation dm bufio: don't take the lock in dm_bufio_shrink_count dm bufio: avoid sleeping while holding the dm_bufio lock dm table: simplify dm_table_determine_type() dm table: an 'all_blk_mq' table must be loaded for a blk-mq DM device ...
Diffstat (limited to 'Documentation/hwmon/tmp401')