summaryrefslogtreecommitdiff
path: root/sys/net/pfkey.c
diff options
context:
space:
mode:
authorJason Wright <jason@cvs.openbsd.org>2003-02-16 19:54:21 +0000
committerJason Wright <jason@cvs.openbsd.org>2003-02-16 19:54:21 +0000
commitca464888ff0bb2738c5ff4f1e6025280e0ea6d19 (patch)
treefeadcb09f522c8597ede02d3a50521e9ef3a1ca3 /sys/net/pfkey.c
parent0ee786dc6bdc3a051e9700a9437bca89821fc1a2 (diff)
KNF
Diffstat (limited to 'sys/net/pfkey.c')
-rw-r--r--sys/net/pfkey.c359
1 files changed, 183 insertions, 176 deletions
diff --git a/sys/net/pfkey.c b/sys/net/pfkey.c
index 1d3d09b3054..628c0028b67 100644
--- a/sys/net/pfkey.c
+++ b/sys/net/pfkey.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pfkey.c,v 1.12 2002/12/11 21:48:40 fgsch Exp $ */
+/* $OpenBSD: pfkey.c,v 1.13 2003/02/16 19:54:20 jason Exp $ */
/*
* @(#)COPYRIGHT 1.1 (NRL) 17 January 1995
@@ -83,7 +83,8 @@
#include <net/raw_cb.h>
#define PFKEY_PROTOCOL_MAX 3
-static struct pfkey_version *pfkey_versions[PFKEY_PROTOCOL_MAX+1] = { NULL, NULL, NULL, NULL };
+static struct pfkey_version *pfkey_versions[PFKEY_PROTOCOL_MAX+1] =
+ { NULL, NULL, NULL, NULL };
#define PFKEY_MSG_MAXSZ 4096
@@ -91,262 +92,268 @@ struct sockaddr pfkey_addr = { 2, PF_KEY, };
/* static struct domain pfkey_domain; */
static int pfkey_usrreq(struct socket *socket, int req, struct mbuf *mbuf,
- struct mbuf *nam, struct mbuf *control);
+ struct mbuf *nam, struct mbuf *control);
static int pfkey_output(struct mbuf *mbuf, struct socket *socket);
int pfkey_register(struct pfkey_version *version);
int pfkey_unregister(struct pfkey_version *version);
int pfkey_sendup(struct socket *socket, struct mbuf *packet, int more);
void pfkey_init(void);
-static int pfkey_buildprotosw(void);
+int pfkey_buildprotosw(void);
int
pfkey_register(struct pfkey_version *version)
{
- int rval;
+ int rval;
- if ((version->protocol > PFKEY_PROTOCOL_MAX) || (version->protocol < 0))
- return EPROTONOSUPPORT;
+ if ((version->protocol > PFKEY_PROTOCOL_MAX) ||
+ (version->protocol < 0))
+ return (EPROTONOSUPPORT);
- if (pfkey_versions[version->protocol])
- return EADDRINUSE;
+ if (pfkey_versions[version->protocol])
+ return (EADDRINUSE);
- pfkey_versions[version->protocol] = version;
+ pfkey_versions[version->protocol] = version;
- if ((rval = pfkey_buildprotosw()) != 0) {
- pfkey_versions[version->protocol] = NULL;
- return rval;
- }
+ if ((rval = pfkey_buildprotosw()) != 0) {
+ pfkey_versions[version->protocol] = NULL;
+ return (rval);
+ }
- return 0;
+ return (0);
}
int
pfkey_unregister(struct pfkey_version *version)
{
- int rval;
+ int rval;
- if ((rval = pfkey_buildprotosw()) != 0)
- return rval;
+ if ((rval = pfkey_buildprotosw()) != 0)
+ return (rval);
- pfkey_versions[version->protocol] = NULL;
- return 0;
+ pfkey_versions[version->protocol] = NULL;
+ return (0);
}
int
pfkey_sendup(struct socket *socket, struct mbuf *packet, int more)
{
- struct mbuf *packet2;
- int s;
-
- if (more) {
- if (!(packet2 = m_copym2(packet, 0, M_COPYALL, M_DONTWAIT)))
- return ENOMEM;
- } else
- packet2 = packet;
-
- s = spltdb();
- if (!sbappendaddr(&socket->so_rcv, &pfkey_addr, packet2, NULL)) {
- m_freem(packet2);
- splx(s);
- return ENOBUFS;
- }
- splx(s);
-
- sorwakeup(socket);
- return 0;
+ struct mbuf *packet2;
+ int s;
+
+ if (more) {
+ if (!(packet2 = m_copym2(packet, 0, M_COPYALL, M_DONTWAIT)))
+ return (ENOMEM);
+ } else
+ packet2 = packet;
+
+ s = spltdb();
+ if (!sbappendaddr(&socket->so_rcv, &pfkey_addr, packet2, NULL)) {
+ m_freem(packet2);
+ splx(s);
+ return (ENOBUFS);
+ }
+ splx(s);
+
+ sorwakeup(socket);
+ return (0);
}
static int
pfkey_output(struct mbuf *mbuf, struct socket *socket)
{
- void *message;
- int error = 0;
+ void *message;
+ int error = 0;
#if DIAGNOSTIC
- if (!mbuf || !(mbuf->m_flags & M_PKTHDR)) {
- error = EINVAL;
- goto ret;
- }
+ if (!mbuf || !(mbuf->m_flags & M_PKTHDR)) {
+ error = EINVAL;
+ goto ret;
+ }
#endif /* DIAGNOSTIC */
- if (mbuf->m_pkthdr.len > PFKEY_MSG_MAXSZ) {
- error = EMSGSIZE;
- goto ret;
- }
+ if (mbuf->m_pkthdr.len > PFKEY_MSG_MAXSZ) {
+ error = EMSGSIZE;
+ goto ret;
+ }
- if (!(message = malloc((unsigned long) mbuf->m_pkthdr.len, M_PFKEY,
- M_DONTWAIT))) {
- error = ENOMEM;
- goto ret;
- }
+ if (!(message = malloc((unsigned long) mbuf->m_pkthdr.len,
+ M_PFKEY, M_DONTWAIT))) {
+ error = ENOMEM;
+ goto ret;
+ }
- m_copydata(mbuf, 0, mbuf->m_pkthdr.len, message);
+ m_copydata(mbuf, 0, mbuf->m_pkthdr.len, message);
- error =
- pfkey_versions[socket->so_proto->pr_protocol]->send(socket, message,
- mbuf->m_pkthdr.len);
+ error = pfkey_versions[socket->so_proto->pr_protocol]->send(socket,
+ message, mbuf->m_pkthdr.len);
- ret:
- if (mbuf)
- m_freem (mbuf);
- return error;
+ret:
+ if (mbuf)
+ m_freem (mbuf);
+ return (error);
}
static int
pfkey_attach(struct socket *socket, struct mbuf *proto)
{
- int rval;
- int s;
+ int rval;
+ int s;
- if (!(socket->so_pcb = malloc(sizeof(struct rawcb), M_PCB, M_DONTWAIT)))
- return ENOMEM;
- bzero(socket->so_pcb, sizeof(struct rawcb));
+ if (!(socket->so_pcb = malloc(sizeof(struct rawcb),
+ M_PCB, M_DONTWAIT)))
+ return (ENOMEM);
+ bzero(socket->so_pcb, sizeof(struct rawcb));
- s = splnet();
- rval = raw_usrreq(socket, PRU_ATTACH, NULL, proto, NULL);
- splx(s);
- if (rval)
- goto ret;
+ s = splnet();
+ rval = raw_usrreq(socket, PRU_ATTACH, NULL, proto, NULL);
+ splx(s);
+ if (rval)
+ goto ret;
- ((struct rawcb *)socket->so_pcb)->rcb_faddr = &pfkey_addr;
- soisconnected(socket);
+ ((struct rawcb *)socket->so_pcb)->rcb_faddr = &pfkey_addr;
+ soisconnected(socket);
- socket->so_options |= SO_USELOOPBACK;
- if ((rval = pfkey_versions[socket->so_proto->pr_protocol]->create(socket))
- != 0)
- goto ret;
+ socket->so_options |= SO_USELOOPBACK;
+ if ((rval =
+ pfkey_versions[socket->so_proto->pr_protocol]->create(socket)) != 0)
+ goto ret;
- return 0;
+ return (0);
ret:
- free(socket->so_pcb, M_PCB);
- return rval;
+ free(socket->so_pcb, M_PCB);
+ return (rval);
}
static int
pfkey_detach(struct socket *socket)
{
- int rval, i, s;
+ int rval, i, s;
- rval = pfkey_versions[socket->so_proto->pr_protocol]->release(socket);
- s = splnet();
- i = raw_usrreq(socket, PRU_DETACH, NULL, NULL, NULL);
- splx(s);
+ rval = pfkey_versions[socket->so_proto->pr_protocol]->release(socket);
+ s = splnet();
+ i = raw_usrreq(socket, PRU_DETACH, NULL, NULL, NULL);
+ splx(s);
- if (!rval)
- rval = i;
+ if (!rval)
+ rval = i;
- return rval;
+ return (rval);
}
static int
pfkey_usrreq(struct socket *socket, int req, struct mbuf *mbuf,
- struct mbuf *nam, struct mbuf *control)
+ struct mbuf *nam, struct mbuf *control)
{
- int rval;
- int s;
+ int rval;
+ int s;
- if ((socket->so_proto->pr_protocol > PFKEY_PROTOCOL_MAX) ||
- (socket->so_proto->pr_protocol < 0) ||
- !pfkey_versions[socket->so_proto->pr_protocol])
- return EPROTONOSUPPORT;
+ if ((socket->so_proto->pr_protocol > PFKEY_PROTOCOL_MAX) ||
+ (socket->so_proto->pr_protocol < 0) ||
+ !pfkey_versions[socket->so_proto->pr_protocol])
+ return (EPROTONOSUPPORT);
- switch(req) {
- case PRU_ATTACH:
- return pfkey_attach(socket, nam);
+ switch(req) {
+ case PRU_ATTACH:
+ return (pfkey_attach(socket, nam));
- case PRU_DETACH:
- return pfkey_detach(socket);
+ case PRU_DETACH:
+ return (pfkey_detach(socket));
- default:
- s = splnet();
- rval = raw_usrreq(socket, req, mbuf, nam, control);
- splx(s);
- }
+ default:
+ s = splnet();
+ rval = raw_usrreq(socket, req, mbuf, nam, control);
+ splx(s);
+ }
- return rval;
+ return (rval);
}
static struct domain pfkey_domain = {
- PF_KEY,
- "PF_KEY",
- NULL, /* init */
- NULL, /* externalize */
- NULL, /* dispose */
- NULL, /* protosw */
- NULL, /* protoswNPROTOSW */
- NULL, /* dom_next */
- rn_inithead, /* dom_rtattach */
- 16, /* rtoffset */
- sizeof(struct sockaddr_encap) /* maxrtkey */
+ PF_KEY,
+ "PF_KEY",
+ NULL, /* init */
+ NULL, /* externalize */
+ NULL, /* dispose */
+ NULL, /* protosw */
+ NULL, /* protoswNPROTOSW */
+ NULL, /* dom_next */
+ rn_inithead, /* dom_rtattach */
+ 16, /* rtoffset */
+ sizeof(struct sockaddr_encap) /* maxrtkey */
};
static struct protosw pfkey_protosw_template = {
- SOCK_RAW,
- &pfkey_domain,
- -1, /* protocol */
- PR_ATOMIC | PR_ADDR,
- (void *) raw_input,
- (void *) pfkey_output,
- (void *) raw_ctlinput,
- NULL, /* ctloutput */
- pfkey_usrreq,
- NULL, /* init */
- NULL, /* fasttimo */
- NULL, /* slowtimo */
- NULL, /* drain */
- NULL /* sysctl */
+ SOCK_RAW,
+ &pfkey_domain,
+ -1, /* protocol */
+ PR_ATOMIC | PR_ADDR,
+ (void *) raw_input,
+ (void *) pfkey_output,
+ (void *) raw_ctlinput,
+ NULL, /* ctloutput */
+ pfkey_usrreq,
+ NULL, /* init */
+ NULL, /* fasttimo */
+ NULL, /* slowtimo */
+ NULL, /* drain */
+ NULL /* sysctl */
};
-static int
+int
pfkey_buildprotosw(void)
{
- struct protosw *protosw, *p;
- int i, j;
-
- for (i = j = 0; i <= PFKEY_PROTOCOL_MAX; i++)
- if (pfkey_versions[i])
- j++;
-
- if (j) {
- if (!(protosw = malloc(j * sizeof(struct protosw), M_PFKEY, M_DONTWAIT)))
- return ENOMEM;
-
- for (i = 0, p = protosw; i <= PFKEY_PROTOCOL_MAX; i++)
- if (pfkey_versions[i]) {
- bcopy(&pfkey_protosw_template, p, sizeof(struct protosw));
- p->pr_protocol = pfkey_versions[i]->protocol;
- p++;
- }
-
- if (pfkey_domain.dom_protosw)
- free(pfkey_domain.dom_protosw, M_PFKEY);
-
- pfkey_domain.dom_protosw = protosw;
- pfkey_domain.dom_protoswNPROTOSW = p;
- } else {
- if (!(protosw = malloc(sizeof(struct protosw), M_PFKEY, M_DONTWAIT)))
- return ENOMEM;
-
- bcopy(&pfkey_protosw_template, protosw, sizeof(struct protosw));
-
- if (pfkey_domain.dom_protosw)
- free(pfkey_domain.dom_protosw, M_PFKEY);
-
- pfkey_domain.dom_protosw = protosw;
- pfkey_domain.dom_protoswNPROTOSW = protosw;
- }
-
- return 0;
+ struct protosw *protosw, *p;
+ int i, j;
+
+ for (i = j = 0; i <= PFKEY_PROTOCOL_MAX; i++)
+ if (pfkey_versions[i])
+ j++;
+
+ if (j) {
+ if (!(protosw = malloc(j * sizeof(struct protosw),
+ M_PFKEY, M_DONTWAIT)))
+ return (ENOMEM);
+
+ for (i = 0, p = protosw; i <= PFKEY_PROTOCOL_MAX; i++)
+ if (pfkey_versions[i]) {
+ bcopy(&pfkey_protosw_template, p,
+ sizeof(struct protosw));
+ p->pr_protocol = pfkey_versions[i]->protocol;
+ p++;
+ }
+
+ if (pfkey_domain.dom_protosw)
+ free(pfkey_domain.dom_protosw, M_PFKEY);
+
+ pfkey_domain.dom_protosw = protosw;
+ pfkey_domain.dom_protoswNPROTOSW = p;
+ } else {
+ if (!(protosw = malloc(sizeof(struct protosw), M_PFKEY,
+ M_DONTWAIT)))
+ return (ENOMEM);
+
+ bcopy(&pfkey_protosw_template, protosw,
+ sizeof(struct protosw));
+
+ if (pfkey_domain.dom_protosw)
+ free(pfkey_domain.dom_protosw, M_PFKEY);
+
+ pfkey_domain.dom_protosw = protosw;
+ pfkey_domain.dom_protoswNPROTOSW = protosw;
+ }
+
+ return (0);
}
-void pfkey_init(void)
+void
+pfkey_init(void)
{
- if (pfkey_buildprotosw() != 0)
- return;
+ if (pfkey_buildprotosw() != 0)
+ return;
- pfkey_domain.dom_next = domains;
- domains = &pfkey_domain;
- pfkeyv2_init();
+ pfkey_domain.dom_next = domains;
+ domains = &pfkey_domain;
+ pfkeyv2_init();
}