blob: 7de88feb12700edaaa1b8074148ceaa1f4d77624 [file] [log] [blame]
Dmitry V. Levin45ae9372016-06-23 17:38:18 +00001/*
2 * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include "defs.h"
29
30#include <sys/socket.h>
31#include <arpa/inet.h>
32#include <linux/if_arp.h>
33#include <linux/if_ether.h>
34#include <linux/if_packet.h>
35
36#include "xlat/arp_hardware_types.h"
37#include "xlat/ethernet_protocols.h"
38#include "xlat/af_packet_types.h"
39
40void
41print_sockaddr_data_ll(const void *const buf, const int addrlen)
42{
43 const struct sockaddr_ll *const sa_ll = buf;
44
45 tprints("sll_protocol=htons(");
46 printxval(ethernet_protocols, ntohs(sa_ll->sll_protocol), "ETH_P_???");
47 tprints("), sll_ifindex=");
48 print_ifindex(sa_ll->sll_ifindex);
49 tprints(", sll_hatype=");
50 printxval(arp_hardware_types, sa_ll->sll_hatype, "ARPHRD_???");
51 tprints(", sll_pkttype=");
52 printxval(af_packet_types, sa_ll->sll_pkttype, "PACKET_???");
53 tprintf(", sll_halen=%u", sa_ll->sll_halen);
54 if (sa_ll->sll_halen) {
55 const unsigned int oob_halen =
56 addrlen - offsetof(struct sockaddr_ll, sll_addr);
57 unsigned int i;
58
59 tprints(", sll_addr=[");
60 for (i = 0; i < sa_ll->sll_halen; ++i) {
61 if (i)
62 tprints(", ");
63 if (i >= oob_halen) {
64 tprints("...");
65 break;
66 }
67 tprintf("%#02x", sa_ll->sll_addr[i]);
68 }
69 tprints("]");
70 }
71}