/* * netsniff-ng - the packet sniffing beast * Copyright 2009, 2010 Daniel Borkmann. * Copyright 2018 Markus Amend * Subject to the GPL, version 2. */ #include #include #include /* for ntohs() */ #include "proto.h" #include "protos.h" #include "pkt_buff.h" struct dccphdr { uint16_t source; uint16_t dest; uint8_t data_offs; uint8_t cc_cscov; uint16_t checks; #if defined(__LITTLE_ENDIAN_BITFIELD) __extension__ uint32_t x:1, type:4, res:3, sqnr:24; #elif defined (__BIG_ENDIAN_BITFIELD) __extension__ uint32_t res:3, type:4, x:1, sqnr:24; #else # error "Please fix " #endif } __packed; struct dccpexthdr { uint32_t seqnr_low; } __packed; struct ack_subhdr { uint32_t res:8, acknr_low: 24; } __packed; struct ack_extsubhdr { uint16_t res; uint16_t acknr_high; uint32_t acknr_low; } __packed; static char* dccp_pkt_type(uint8_t type) { switch(type) { case 0: return "Request"; case 1: return "Response"; case 2: return "Data"; case 3: return "Ack"; case 4: return "DataAck"; case 5: return "CloseReq"; case 6: return "Close"; case 7: return "Reset"; case 8: return "Sync"; case 9: return "SyncAck"; case 10 ... 15: return "Reserved"; } return "Undef"; } static void dccp(struct pkt_buff *pkt) { struct dccphdr *dccp = (struct dccphdr *) pkt_pull(pkt, sizeof(*dccp)); struct dccpexthdr *dccpext = NULL; struct ack_subhdr *ack = NULL; struct ack_extsubhdr *ackext = NULL; uint16_t src, dest; uint64_t seqnr; int64_t acknr = -1; size_t used_hdr = 0; if (dccp == NULL) return; used_hdr += sizeof(*dccp); seqnr = (uint64_t) ntohl(dccp->sqnr); /* check for extended sequence number */ if (dccp->x) { dccpext = (struct dccpexthdr *) pkt_pull(pkt, sizeof(*dccpext)); if (dccpext == NULL) return; used_hdr += sizeof(*dccpext); seqnr = (((uint64_t) seqnr)<<24) | ntohl(dccpext->seqnr_low); } /* check for ack header */ if (dccp->type == 1 || (dccp->type >= 2 && dccp->type <= 9)) { if (dccp->x) { /* Extended ack header */ ackext = (struct ack_extsubhdr *) pkt_pull(pkt, sizeof(*ackext)); if (ackext == NULL) return; used_hdr += sizeof(*ackext); acknr = (((uint64_t) ntohs(ackext->acknr_high))<<32) | ntohl(ackext->acknr_low); } else { /* standard ack header */ ack = (struct ack_subhdr *) pkt_pull(pkt, sizeof(*ack)); if (ack == NULL) return; used_hdr += sizeof(*ack); acknr = ntohl((uint32_t) ack->acknr_low); } } src = ntohs(dccp->source); dest = ntohs(dccp->dest); tprintf(" [ DCCP "); tprintf("Port (%u", src); tprintf(" => %u", dest); tprintf("), "); tprintf("Header Len (%u Bytes), ", dccp->data_offs * 4); tprintf("Type: %s, ", dccp_pkt_type((uint8_t) dccp->type)); tprintf("Seqnr:%lu", seqnr); if (acknr > 0) tprintf(", AckNr:%lu", acknr); tprintf(" ]\n"); } static void dccp_less(struct pkt_buff *pkt) { struct dccphdr *dccp = (struct dccphdr *) pkt_pull(pkt, sizeof(*dccp)); uint16_t src, dest; if (dccp == NULL) return; src = ntohs(dccp->source); dest = ntohs(dccp->dest); tprintf(" DCCP %u", src); tprintf("/%u", dest); } struct protocol dccp_ops = { .key = 0x21, .print_full = dccp, .print_less = dccp_less, }; n>space:mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-12-12 21:58:13 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2016-12-12 21:58:13 -0800
commite7aa8c2eb11ba69b1b69099c3c7bd6be3087b0ba (patch)
treef63906f41699c8e38af9d12b063e2ceab0286ef2 /net/mac802154/rx.c
parente34bac726d27056081d0250c0e173e4b155aa340 (diff)
parent868c97a846a73e937d835b09b8c885a69df50ec8 (diff)
Merge tag 'docs-4.10' of git://git.lwn.net/linuxHEADmaster
Pull documentation update from Jonathan Corbet: "These are the documentation changes for 4.10. It's another busy cycle for the docs tree, as the sphinx conversion continues. Highlights include: - Further work on PDF output, which remains a bit of a pain but should be more solid now. - Five more DocBook template files converted to Sphinx. Only 27 to go... Lots of plain-text files have also been converted and integrated. - Images in binary formats have been replaced with more source-friendly versions. - Various bits of organizational work, including the renaming of various files discussed at the kernel summit. - New documentation for the device_link mechanism. ... and, of course, lots of typo fixes and small updates" * tag 'docs-4.10' of git://git.lwn.net/linux: (193 commits) dma-buf: Extract dma-buf.rst Update Documentation/00-INDEX docs: 00-INDEX: document directories/files with no docs docs: 00-INDEX: remove non-existing entries docs: 00-INDEX: add missing entries for documentation files/dirs docs: 00-INDEX: consolidate process/ and admin-guide/ description scripts: add a script to check if Documentation/00-INDEX is sane Docs: change sh -> awk in REPORTING-BUGS Documentation/core-api/device_link: Add initial documentation core-api: remove an unexpected unident ppc/idle: Add documentation for powersave=off Doc: Correct typo, "Introdution" => "Introduction" Documentation/atomic_ops.txt: convert to ReST markup Documentation/local_ops.txt: convert to ReST markup Documentation/assoc_array.txt: convert to ReST markup docs-rst: parse-headers.pl: cleanup the documentation docs-rst: fix media cleandocs target docs-rst: media/Makefile: reorganize the rules docs-rst: media: build SVG from graphviz files docs-rst: replace bayer.png by a SVG image ...
Diffstat (limited to 'net/mac802154/rx.c')