summaryrefslogtreecommitdiff
path: root/accel-pppd/ctrl/l2tp/l2tp.c
diff options
context:
space:
mode:
authorGuillaume Nault <g.nault@alphalink.fr>2013-02-11 21:00:58 +0100
committerKozlov Dmitry <xeb@mail.ru>2013-02-12 00:12:47 +0400
commit468aabde54df4d500fdc4a2397499a14919ed98a (patch)
treef117997493877ec563b0a380273b1d764e6595db /accel-pppd/ctrl/l2tp/l2tp.c
parent4fbcf13551a43dea3c15459b7f7bda357f685ee3 (diff)
downloadaccel-ppp-xebd-468aabde54df4d500fdc4a2397499a14919ed98a.tar.gz
accel-ppp-xebd-468aabde54df4d500fdc4a2397499a14919ed98a.zip
l2tp: Make l2tp_tunnel_alloc() return a new tunnel
Update the prototype of l2tp_tunnel_alloc() so that it returns the allocated tunnel structure. This will allow the caller to act on the newly created tunnel in different ways depending on the creation context. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
Diffstat (limited to 'accel-pppd/ctrl/l2tp/l2tp.c')
-rw-r--r--accel-pppd/ctrl/l2tp/l2tp.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/accel-pppd/ctrl/l2tp/l2tp.c b/accel-pppd/ctrl/l2tp/l2tp.c
index c35ecb4..0933463 100644
--- a/accel-pppd/ctrl/l2tp/l2tp.c
+++ b/accel-pppd/ctrl/l2tp/l2tp.c
@@ -561,8 +561,12 @@ static void l2tp_conn_close(struct triton_context_t *ctx)
l2tp_tunnel_free(conn);
}
-static int l2tp_tunnel_alloc(struct l2tp_serv_t *serv, struct l2tp_packet_t *pack, struct in_pktinfo *pkt_info, struct l2tp_attr_t *assigned_tid,
- struct l2tp_attr_t *framing_cap, struct l2tp_attr_t *challenge)
+static struct l2tp_conn_t *l2tp_tunnel_alloc(struct l2tp_serv_t *serv,
+ struct l2tp_packet_t *pack,
+ struct in_pktinfo *pkt_info,
+ struct l2tp_attr_t *assigned_tid,
+ struct l2tp_attr_t *framing_cap,
+ struct l2tp_attr_t *challenge)
{
struct l2tp_conn_t *conn;
struct sockaddr_in addr;
@@ -572,7 +576,7 @@ static int l2tp_tunnel_alloc(struct l2tp_serv_t *serv, struct l2tp_packet_t *pac
conn = mempool_alloc(l2tp_conn_pool);
if (!conn) {
log_emerg("l2tp: out of memory\n");
- return -1;
+ return NULL;
}
memset(conn, 0, sizeof(*conn));
@@ -582,7 +586,7 @@ static int l2tp_tunnel_alloc(struct l2tp_serv_t *serv, struct l2tp_packet_t *pac
if (conn->hnd.fd < 0) {
log_error("l2tp: socket: %s\n", strerror(errno));
mempool_free(conn);
- return -1;
+ return NULL;
}
flag = fcntl(conn->hnd.fd, F_GETFD);
@@ -702,12 +706,12 @@ static int l2tp_tunnel_alloc(struct l2tp_serv_t *serv, struct l2tp_packet_t *pac
conn->sess_count = 0;
triton_context_call(&conn->ctx, (triton_event_func)l2tp_send_SCCRP, conn);
- return 0;
+ return conn;
out_err:
close(conn->hnd.fd);
mempool_free(conn);
- return -1;
+ return NULL;
}
static int l2tp_session_connect(struct l2tp_sess_t *sess)
@@ -1119,7 +1123,7 @@ static int l2tp_recv_SCCRQ(struct l2tp_serv_t *serv, struct l2tp_packet_t *pack,
return -1;
}
- if (l2tp_tunnel_alloc(serv, pack, pkt_info, assigned_tid, framing_cap, challenge))
+ if (l2tp_tunnel_alloc(serv, pack, pkt_info, assigned_tid, framing_cap, challenge) == NULL)
return -1;
} else if (assigned_cid) {