diff options
author | Guillaume Nault <g.nault@alphalink.fr> | 2013-02-11 21:00:58 +0100 |
---|---|---|
committer | Kozlov Dmitry <xeb@mail.ru> | 2013-02-12 00:12:47 +0400 |
commit | 468aabde54df4d500fdc4a2397499a14919ed98a (patch) | |
tree | f117997493877ec563b0a380273b1d764e6595db /accel-pppd/ctrl/l2tp/l2tp.c | |
parent | 4fbcf13551a43dea3c15459b7f7bda357f685ee3 (diff) | |
download | accel-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.c | 18 |
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) { |