diff options
author | Vadim Kochan <vadim4j@gmail.com> | 2015-06-18 00:57:07 +0200 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2015-06-18 00:59:53 +0200 |
commit | 15801106bd8ddbccd4125e8fe5d146cb908107ab (patch) | |
tree | 1a278f868c54d33fddc640645a78153bd6b5d39e | |
parent | da8fcdd7d8ce59ea334ec24cdaddcc02eb611f04 (diff) |
pcap_io: add sockaddr_ll to pcap_ll
Add relevant structure and conversion functions in both directions.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
[ dbkm: split out patch ]
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
-rw-r--r-- | pcap_io.h | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -58,6 +58,14 @@ struct pcap_timeval_ns { int32_t tv_nsec; }; +struct pcap_ll { + uint16_t pkttype; + uint16_t hatype; + uint16_t len; + uint8_t addr[8]; + uint16_t protocol; +}; + struct pcap_pkthdr { struct pcap_timeval ts; uint32_t caplen; @@ -138,6 +146,28 @@ extern const struct pcap_file_ops pcap_rw_ops __maybe_unused; extern const struct pcap_file_ops pcap_sg_ops __maybe_unused; extern const struct pcap_file_ops pcap_mm_ops __maybe_unused; +static inline void sockaddr_to_ll(const struct sockaddr_ll *sll, + struct pcap_ll *ll) +{ + ll->pkttype = cpu_to_be16(sll->sll_pkttype); + ll->hatype = cpu_to_be16(sll->sll_hatype); + ll->len = cpu_to_be16(sll->sll_halen); + ll->protocol = sll->sll_protocol; /* already be16 */ + + memcpy(ll->addr, sll->sll_addr, sizeof(ll->addr)); +} + +static inline void ll_to_sockaddr(const struct pcap_ll *ll, + struct sockaddr_ll *sll) +{ + sll->sll_pkttype = be16_to_cpu(ll->pkttype); + sll->sll_hatype = be16_to_cpu(ll->hatype); + sll->sll_halen = be16_to_cpu(ll->len); + sll->sll_protocol = ll->protocol; /* stays be16 */ + + memcpy(sll->sll_addr, ll->addr, sizeof(ll->addr)); +} + static inline uint16_t tp_to_pcap_tsource(uint32_t status) { if (status & TP_STATUS_TS_RAW_HARDWARE) |