1 /* $NetBSD: packet.c,v 1.1 2008/08/17 13:20:57 plunky Exp $ */
4 * Copyright (c) 2008 Iain Hibbert
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
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.
28 #include <sys/cdefs.h>
29 __RCSID("$NetBSD: packet.c,v 1.1 2008/08/17 13:20:57 plunky Exp $");
34 packet_alloc(channel_t
*chan
)
38 pkt
= malloc(sizeof(packet_t
) + chan
->mru
);
40 log_err("%s() failed: %m", __func__
);
44 memset(pkt
, 0, sizeof(packet_t
));
45 STAILQ_INIT(&pkt
->extlist
);
55 packet_free(packet_t
*pkt
)
59 if (pkt
->refcnt
-- > 0)
62 while ((eh
= STAILQ_FIRST(&pkt
->extlist
)) != NULL
) {
63 STAILQ_REMOVE_HEAD(&pkt
->extlist
, next
);
68 if (pkt
->chan
->refcnt
== 0)
69 channel_free(pkt
->chan
);
75 packet_adj(packet_t
*pkt
, size_t size
)
78 assert(pkt
->refcnt
== 0);
79 assert(pkt
->len
>= size
);
86 pkthdr_alloc(packet_t
*pkt
)
90 ph
= malloc(sizeof(pkthdr_t
));
92 log_err("%s() failed: %m", __func__
);
103 pkthdr_free(pkthdr_t
*ph
)
106 packet_free(ph
->data
);