]>
git.ipfire.org Git - thirdparty/lldpd.git/blob - tests/common.c
1 /* -*- mode: c; c-file-style: "openbsd" -*- */
3 * Copyright (c) 2015 Vincent Bernat <bernat@luffy.cx>
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 #include <sys/types.h>
29 char *filename
= NULL
;
31 char macaddress
[ETHER_ADDR_LEN
] = { 0x5e, 0x10, 0x8e, 0xe7, 0x84, 0xad };
32 struct lldpd_hardware hardware
;
33 struct lldpd_chassis chassis
;
36 pcap_send(struct lldpd
*cfg
, struct lldpd_hardware
*hardware
,
37 char *buffer
, size_t size
)
39 struct pcaprec_hdr hdr
;
43 /* Write pcap record header */
44 hdr
.ts_sec
= time(NULL
);
46 hdr
.incl_len
= hdr
.orig_len
= size
;
47 n
= write(dump
, &hdr
, sizeof(hdr
));
49 fail("unable to write pcap record header to %s", filename
);
54 n
= write(dump
, buffer
, size
);
56 fail("unable to write pcap data to %s", filename
);
60 /* Append to list of packets */
61 pkt
= (struct packet
*)malloc(size
+ sizeof(TAILQ_HEAD(,packet
)) + sizeof(int));
63 fail("unable to allocate packet");
66 memcpy(pkt
->data
, buffer
, size
);
68 TAILQ_INSERT_TAIL(&pkts
, pkt
, next
);
72 struct lldpd_ops pcap_ops
= {
74 .recv
= NULL
, /* Won't be used */
75 .cleanup
= NULL
, /* Won't be used */
82 static int serial
= 0;
85 /* Prepare packet buffer */
87 /* Open a new dump file */
88 n
= asprintf(&filename
, "%s_%04d.pcap", filenameprefix
, serial
++);
90 fail("unable to compute filename");
93 dump
= open(filename
, O_WRONLY
| O_CREAT
| O_TRUNC
, 0644);
95 fail("unable to open %s", filename
);
98 /* Write a PCAP header */
99 hdr
.magic_number
= 0xa1b2c3d4;
100 hdr
.version_major
= 2;
101 hdr
.version_minor
= 4;
106 n
= write(dump
, &hdr
, sizeof(hdr
));
108 fail("unable to write pcap header to %s", filename
);
111 /* Prepare hardware */
112 memset(&hardware
, 0, sizeof(struct lldpd_hardware
));
113 TAILQ_INIT(&hardware
.h_rports
);
115 TAILQ_INIT(&hardware
.h_lport
.p_vlans
);
116 TAILQ_INIT(&hardware
.h_lport
.p_ppvids
);
117 TAILQ_INIT(&hardware
.h_lport
.p_pids
);
119 hardware
.h_mtu
= 1500;
120 hardware
.h_ifindex
= 4;
121 strlcpy(hardware
.h_ifname
, "test", sizeof(hardware
.h_ifname
));
122 memcpy(hardware
.h_lladdr
, macaddress
, ETHER_ADDR_LEN
);
123 hardware
.h_ops
= &pcap_ops
;
124 /* Prepare chassis */
125 memset(&chassis
, 0, sizeof(struct lldpd_chassis
));
126 hardware
.h_lport
.p_chassis
= &chassis
;
132 struct packet
*npkt
, *pkt
;
133 for (pkt
= TAILQ_FIRST(&pkts
);
136 npkt
= TAILQ_NEXT(pkt
, next
);
137 TAILQ_REMOVE(&pkts
, pkt
, next
);
150 /* Disable leak detection sanitizer */
151 int __lsan_is_turned_off() {