version 1.1, 2012/02/21 23:32:47
|
version 1.1.1.3.2.1, 2023/09/27 11:08:00
|
Line 244 Notes
|
Line 244 Notes
|
************************************************************************/ |
************************************************************************/ |
|
|
static int ppp_l2tp_ctrl_setup_1(struct ppp_l2tp_ctrl *ctrl, |
static int ppp_l2tp_ctrl_setup_1(struct ppp_l2tp_ctrl *ctrl, |
struct ppp_l2tp_avp_ptrs *ptrs); | struct ppp_l2tp_avp_ptrs *ptrs, |
| struct ppp_l2tp_avp_list *avps); |
static int ppp_l2tp_ctrl_setup_2(struct ppp_l2tp_ctrl *ctrl, |
static int ppp_l2tp_ctrl_setup_2(struct ppp_l2tp_ctrl *ctrl, |
struct ppp_l2tp_avp_ptrs *ptrs); |
struct ppp_l2tp_avp_ptrs *ptrs); |
static void ppp_l2tp_ctrl_send(struct ppp_l2tp_ctrl *ctrl, |
static void ppp_l2tp_ctrl_send(struct ppp_l2tp_ctrl *ctrl, |
Line 296 static void ppp_l2tp_ctrl_dump(struct ppp_l2tp_ctrl *c
|
Line 297 static void ppp_l2tp_ctrl_dump(struct ppp_l2tp_ctrl *c
|
struct ppp_l2tp_avp_list *list, const char *fmt, ...) |
struct ppp_l2tp_avp_list *list, const char *fmt, ...) |
__printflike(3, 4); |
__printflike(3, 4); |
static const char *ppp_l2tp_ctrl_state_str(enum l2tp_ctrl_state state); |
static const char *ppp_l2tp_ctrl_state_str(enum l2tp_ctrl_state state); |
static const char *ppp_l2tp_sess_state_str(enum l2tp_ctrl_state state); | static const char *ppp_l2tp_sess_state_str(enum l2tp_sess_state state); |
static const char *ppp_l2tp_sess_orig_str(enum l2tp_sess_orig orig); |
static const char *ppp_l2tp_sess_orig_str(enum l2tp_sess_orig orig); |
static const char *ppp_l2tp_sess_side_str(enum l2tp_sess_side side); |
static const char *ppp_l2tp_sess_side_str(enum l2tp_sess_side side); |
|
|
Line 379 static const struct l2tp_msg_info ppp_l2tp_msg_info[]
|
Line 380 static const struct l2tp_msg_info ppp_l2tp_msg_info[]
|
{ SS_ESTABLISHED, SS_DYING, -1 }, |
{ SS_ESTABLISHED, SS_DYING, -1 }, |
{ ORIG_LOCAL, ORIG_REMOTE, -1 }, { SIDE_LAC, -1 }, |
{ ORIG_LOCAL, ORIG_REMOTE, -1 }, { SIDE_LAC, -1 }, |
{ AVP_ACCM, -1 } }, |
{ AVP_ACCM, -1 } }, |
{ NULL } | { NULL, 0, NULL, NULL, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0 }, { 0, 0 } } |
}; |
}; |
|
|
/* Descriptors for each AVP */ |
/* Descriptors for each AVP */ |
Line 431 static const struct ppp_l2tp_avp_info ppp_l2tp_avp_inf
|
Line 432 static const struct ppp_l2tp_avp_info ppp_l2tp_avp_inf
|
}; |
}; |
|
|
/* All control connections */ |
/* All control connections */ |
struct ghash *ppp_l2tp_ctrls; | static struct ghash *ppp_l2tp_ctrls; |
|
|
static uint32_t gNextSerial = 0; |
static uint32_t gNextSerial = 0; |
|
|
Line 451 ppp_l2tp_ctrl_create(struct pevent_ctx *ctx, pthread_m
|
Line 452 ppp_l2tp_ctrl_create(struct pevent_ctx *ctx, pthread_m
|
{ |
{ |
struct ppp_l2tp_ctrl *ctrl; |
struct ppp_l2tp_ctrl *ctrl; |
struct ngm_mkpeer mkpeer; |
struct ngm_mkpeer mkpeer; |
|
unsigned i; |
u_int16_t value16; |
u_int16_t value16; |
int index, i; | int index; |
|
|
/* Init Call Serial Number */ |
/* Init Call Serial Number */ |
if (gNextSerial == 0) |
if (gNextSerial == 0) |
Line 558 ppp_l2tp_ctrl_create(struct pevent_ctx *ctx, pthread_m
|
Line 560 ppp_l2tp_ctrl_create(struct pevent_ctx *ctx, pthread_m
|
0, AVP_HOST_NAME, ctrl->self_name, strlen(ctrl->self_name)) == -1) |
0, AVP_HOST_NAME, ctrl->self_name, strlen(ctrl->self_name)) == -1) |
goto fail; |
goto fail; |
} else { |
} else { |
int len = ctrl->avps->avps[index].vlen; | unsigned len = ctrl->avps->avps[index].vlen; |
if (len >= sizeof(ctrl->self_name)) |
if (len >= sizeof(ctrl->self_name)) |
len = sizeof(ctrl->self_name) - 1; |
len = sizeof(ctrl->self_name) - 1; |
memcpy(ctrl->self_name, ctrl->avps->avps[index].value, len); |
memcpy(ctrl->self_name, ctrl->avps->avps[index].value, len); |
Line 666 ppp_l2tp_initiate(struct ppp_l2tp_ctrl *ctrl, int out,
|
Line 668 ppp_l2tp_initiate(struct ppp_l2tp_ctrl *ctrl, int out,
|
{ |
{ |
struct ppp_l2tp_sess *sess; |
struct ppp_l2tp_sess *sess; |
u_int32_t value32; |
u_int32_t value32; |
int i; | unsigned i; |
|
|
/* Debugging */ |
/* Debugging */ |
Log(LOG_DEBUG, ("L2TP: %s invoked, ctrl=%p out=%d", __FUNCTION__, ctrl, out)); |
Log(LOG_DEBUG, ("L2TP: %s invoked, ctrl=%p out=%d", __FUNCTION__, ctrl, out)); |
Line 773 ppp_l2tp_connected(struct ppp_l2tp_sess *sess,
|
Line 775 ppp_l2tp_connected(struct ppp_l2tp_sess *sess,
|
{ |
{ |
struct ppp_l2tp_ctrl *const ctrl = sess->ctrl; |
struct ppp_l2tp_ctrl *const ctrl = sess->ctrl; |
u_int32_t value32; |
u_int32_t value32; |
int i; | unsigned i; |
|
|
/* Debugging */ |
/* Debugging */ |
Log(LOG_DEBUG, ("L2TP: %s invoked, sess=%p", __FUNCTION__, sess)); |
Log(LOG_DEBUG, ("L2TP: %s invoked, sess=%p", __FUNCTION__, sess)); |
Line 965 ppp_l2tp_ctrl_get_peer_name(struct ppp_l2tp_ctrl *ctrl
|
Line 967 ppp_l2tp_ctrl_get_peer_name(struct ppp_l2tp_ctrl *ctrl
|
return (0); |
return (0); |
}; |
}; |
|
|
|
char * |
|
ppp_l2tp_ctrl_get_peer_name_p(struct ppp_l2tp_ctrl *ctrl) { |
|
return &(ctrl->peer_name[0]); |
|
}; |
|
|
/* |
/* |
* Get the node path and hook name for the hook that corresponds |
* Get the node path and hook name for the hook that corresponds |
* to a control connection's L2TP frames. |
* to a control connection's L2TP frames. |
Line 1024 ppp_l2tp_sess_hooked(struct ppp_l2tp_sess *sess) {
|
Line 1031 ppp_l2tp_sess_hooked(struct ppp_l2tp_sess *sess) {
|
*/ |
*/ |
static int |
static int |
ppp_l2tp_ctrl_setup_1(struct ppp_l2tp_ctrl *ctrl, |
ppp_l2tp_ctrl_setup_1(struct ppp_l2tp_ctrl *ctrl, |
struct ppp_l2tp_avp_ptrs *ptrs) | struct ppp_l2tp_avp_ptrs *ptrs, |
| struct ppp_l2tp_avp_list *avps) |
{ |
{ |
/* Log */ |
/* Log */ |
Log(LOG_INFO, ("L2TP: connected to \"%s\", version=%u.%u", |
Log(LOG_INFO, ("L2TP: connected to \"%s\", version=%u.%u", |
Line 1085 ppp_l2tp_ctrl_setup_1(struct ppp_l2tp_ctrl *ctrl,
|
Line 1093 ppp_l2tp_ctrl_setup_1(struct ppp_l2tp_ctrl *ctrl,
|
MD5_Update(&md5ctx, &ptrs->challenge->value, ptrs->challenge->length); |
MD5_Update(&md5ctx, &ptrs->challenge->value, ptrs->challenge->length); |
MD5_Final(hash, &md5ctx); |
MD5_Final(hash, &md5ctx); |
|
|
if (ppp_l2tp_avp_list_append(ctrl->avps, 0, | if (ppp_l2tp_avp_list_append(avps, 0, |
0, AVP_CHALLENGE_RESPONSE, hash, sizeof(hash)) == -1) |
0, AVP_CHALLENGE_RESPONSE, hash, sizeof(hash)) == -1) |
return (0); |
return (0); |
} |
} |
Line 1116 ppp_l2tp_ctrl_setup_2(struct ppp_l2tp_ctrl *ctrl,
|
Line 1124 ppp_l2tp_ctrl_setup_2(struct ppp_l2tp_ctrl *ctrl,
|
|
|
/* Make sure response was included */ |
/* Make sure response was included */ |
if (ptrs->challengresp == NULL) { |
if (ptrs->challengresp == NULL) { |
Log(LOG_WARNING, ("L2TP: SCCRP lacks challenge response")); | Log(LOG_WARNING, ("L2TP: SCCRP/SCCCN lacks challenge response")); |
ppp_l2tp_ctrl_close(ctrl, |
ppp_l2tp_ctrl_close(ctrl, |
L2TP_RESULT_NOT_AUTH, 0, NULL); |
L2TP_RESULT_NOT_AUTH, 0, NULL); |
return (0); | return (-1); |
} |
} |
|
|
/* Calculate challenge response */ |
/* Calculate challenge response */ |
Line 1745 ppp_l2tp_data_event(void *arg)
|
Line 1753 ppp_l2tp_data_event(void *arg)
|
u_int16_t msgtype; |
u_int16_t msgtype; |
char ebuf[64]; |
char ebuf[64]; |
int len; |
int len; |
int i; | unsigned i, j; |
int j; | |
|
|
/* Restart idle timer */ |
/* Restart idle timer */ |
pevent_unregister(&ctrl->idle_timer); |
pevent_unregister(&ctrl->idle_timer); |
Line 1854 ppp_l2tp_data_event(void *arg)
|
Line 1861 ppp_l2tp_data_event(void *arg)
|
|
|
/* Check for valid control connection state */ |
/* Check for valid control connection state */ |
for (i = 0; msg_info->valid_states[i] != -1 |
for (i = 0; msg_info->valid_states[i] != -1 |
&& msg_info->valid_states[i] != ctrl->state; i++); | && msg_info->valid_states[i] != (int)ctrl->state; i++); |
if (msg_info->valid_states[i] == -1) { |
if (msg_info->valid_states[i] == -1) { |
|
|
/* Could be in CS_DYING if we just closed the tunnel */ |
/* Could be in CS_DYING if we just closed the tunnel */ |
Line 1913 ppp_l2tp_data_event(void *arg)
|
Line 1920 ppp_l2tp_data_event(void *arg)
|
|
|
/* Check for valid session state, origination, and side */ |
/* Check for valid session state, origination, and side */ |
for (i = 0; msg_info->valid_states[i] != -1 |
for (i = 0; msg_info->valid_states[i] != -1 |
&& msg_info->valid_states[i] != sess->state; i++); | && msg_info->valid_states[i] != (int)sess->state; i++); |
if (msg_info->valid_states[i] == -1) { |
if (msg_info->valid_states[i] == -1) { |
snprintf(ebuf, sizeof(ebuf), "rec'd %s in state %s", |
snprintf(ebuf, sizeof(ebuf), "rec'd %s in state %s", |
msg_info->name, ppp_l2tp_sess_state_str(sess->state)); |
msg_info->name, ppp_l2tp_sess_state_str(sess->state)); |
Line 1922 ppp_l2tp_data_event(void *arg)
|
Line 1929 ppp_l2tp_data_event(void *arg)
|
goto done; |
goto done; |
} |
} |
for (i = 0; msg_info->valid_orig[i] != -1 |
for (i = 0; msg_info->valid_orig[i] != -1 |
&& msg_info->valid_orig[i] != sess->orig; i++); | && msg_info->valid_orig[i] != (int)sess->orig; i++); |
if (msg_info->valid_orig[i] == -1) { |
if (msg_info->valid_orig[i] == -1) { |
snprintf(ebuf, sizeof(ebuf), "rec'd %s in state %s," |
snprintf(ebuf, sizeof(ebuf), "rec'd %s in state %s," |
" but session originated %sly", msg_info->name, |
" but session originated %sly", msg_info->name, |
Line 1933 ppp_l2tp_data_event(void *arg)
|
Line 1940 ppp_l2tp_data_event(void *arg)
|
goto done; |
goto done; |
} |
} |
for (i = 0; msg_info->valid_side[i] != -1 |
for (i = 0; msg_info->valid_side[i] != -1 |
&& msg_info->valid_side[i] != sess->side; i++); | && msg_info->valid_side[i] != (int)sess->side; i++); |
if (msg_info->valid_side[i] == -1) { |
if (msg_info->valid_side[i] == -1) { |
snprintf(ebuf, sizeof(ebuf), "rec'd %s in state %s," |
snprintf(ebuf, sizeof(ebuf), "rec'd %s in state %s," |
" but we are %s for this session", msg_info->name, |
" but we are %s for this session", msg_info->name, |
Line 2028 ppp_l2tp_handle_SCCRQ(struct ppp_l2tp_ctrl *ctrl,
|
Line 2035 ppp_l2tp_handle_SCCRQ(struct ppp_l2tp_ctrl *ctrl,
|
const u_char *tiebreaker; |
const u_char *tiebreaker; |
struct ghash_walk walk; |
struct ghash_walk walk; |
int diff; |
int diff; |
int i; | unsigned i; |
|
|
|
(void)avps; |
/* See if there is an outstanding SCCRQ to this peer */ |
/* See if there is an outstanding SCCRQ to this peer */ |
ghash_walk_init(ppp_l2tp_ctrls, &walk); |
ghash_walk_init(ppp_l2tp_ctrls, &walk); |
while ((ctrl2 = ghash_walk_next(ppp_l2tp_ctrls, &walk)) != NULL) { |
while ((ctrl2 = ghash_walk_next(ppp_l2tp_ctrls, &walk)) != NULL) { |
Line 2078 ppp_l2tp_handle_SCCRQ(struct ppp_l2tp_ctrl *ctrl,
|
Line 2086 ppp_l2tp_handle_SCCRQ(struct ppp_l2tp_ctrl *ctrl,
|
|
|
ok: |
ok: |
/* Do control connection setup */ |
/* Do control connection setup */ |
if (ppp_l2tp_ctrl_setup_1(ctrl, ptrs) == -1) | if (ppp_l2tp_ctrl_setup_1(ctrl, ptrs, ctrl->avps) == -1) |
return (-1); |
return (-1); |
|
|
/* Send response and update state */ |
/* Send response and update state */ |
Line 2091 static int
|
Line 2099 static int
|
ppp_l2tp_handle_SCCRP(struct ppp_l2tp_ctrl *ctrl, |
ppp_l2tp_handle_SCCRP(struct ppp_l2tp_ctrl *ctrl, |
const struct ppp_l2tp_avp_list *avps, struct ppp_l2tp_avp_ptrs *ptrs) |
const struct ppp_l2tp_avp_list *avps, struct ppp_l2tp_avp_ptrs *ptrs) |
{ |
{ |
|
struct ppp_l2tp_avp_list *avps0; |
|
|
|
(void)avps; |
|
avps0 = ppp_l2tp_avp_list_create(); |
|
|
/* Do control connection setup */ |
/* Do control connection setup */ |
if (ppp_l2tp_ctrl_setup_1(ctrl, ptrs) == -1) | if ((ppp_l2tp_ctrl_setup_1(ctrl, ptrs, avps0) == -1) || |
| (ppp_l2tp_ctrl_setup_2(ctrl, ptrs) == -1)) { |
| ppp_l2tp_avp_list_destroy(&avps0); |
return (-1); |
return (-1); |
if (ppp_l2tp_ctrl_setup_2(ctrl, ptrs) == -1) | } |
return (-1); | |
|
|
/* Send response and update state */ |
/* Send response and update state */ |
ctrl->state = CS_ESTABLISHED; |
ctrl->state = CS_ESTABLISHED; |
ppp_l2tp_ctrl_send(ctrl, 0, SCCCN, ctrl->avps); | ppp_l2tp_ctrl_send(ctrl, 0, SCCCN, avps0); |
if (*ctrl->cb->ctrl_connected != NULL) |
if (*ctrl->cb->ctrl_connected != NULL) |
(*ctrl->cb->ctrl_connected)(ctrl); |
(*ctrl->cb->ctrl_connected)(ctrl); |
|
ppp_l2tp_avp_list_destroy(&avps0); |
return (0); |
return (0); |
} |
} |
|
|
Line 2109 static int
|
Line 2124 static int
|
ppp_l2tp_handle_SCCCN(struct ppp_l2tp_ctrl *ctrl, |
ppp_l2tp_handle_SCCCN(struct ppp_l2tp_ctrl *ctrl, |
const struct ppp_l2tp_avp_list *avps, struct ppp_l2tp_avp_ptrs *ptrs) |
const struct ppp_l2tp_avp_list *avps, struct ppp_l2tp_avp_ptrs *ptrs) |
{ |
{ |
|
(void)avps; |
/* Do control connection setup */ |
/* Do control connection setup */ |
if (ppp_l2tp_ctrl_setup_2(ctrl, ptrs) == -1) |
if (ppp_l2tp_ctrl_setup_2(ctrl, ptrs) == -1) |
return (-1); |
return (-1); |
Line 2127 ppp_l2tp_handle_StopCCN(struct ppp_l2tp_ctrl *ctrl,
|
Line 2143 ppp_l2tp_handle_StopCCN(struct ppp_l2tp_ctrl *ctrl,
|
struct ppp_l2tp_sess *sess; |
struct ppp_l2tp_sess *sess; |
struct ghash_walk walk; |
struct ghash_walk walk; |
|
|
|
(void)avps; |
/* StopCCN implies closing all sessions */ |
/* StopCCN implies closing all sessions */ |
ctrl->peer_notified = 1; |
ctrl->peer_notified = 1; |
ghash_walk_init(ctrl->sessions, &walk); |
ghash_walk_init(ctrl->sessions, &walk); |
Line 2143 static int
|
Line 2160 static int
|
ppp_l2tp_handle_HELLO(struct ppp_l2tp_ctrl *ctrl, |
ppp_l2tp_handle_HELLO(struct ppp_l2tp_ctrl *ctrl, |
const struct ppp_l2tp_avp_list *avps, struct ppp_l2tp_avp_ptrs *ptrs) |
const struct ppp_l2tp_avp_list *avps, struct ppp_l2tp_avp_ptrs *ptrs) |
{ |
{ |
|
(void)avps; |
|
(void)ctrl; |
|
(void)ptrs; |
return (0); |
return (0); |
} |
} |
|
|
Line 2199 static int
|
Line 2219 static int
|
ppp_l2tp_handle_OCRP(struct ppp_l2tp_sess *sess, |
ppp_l2tp_handle_OCRP(struct ppp_l2tp_sess *sess, |
const struct ppp_l2tp_avp_list *avps, struct ppp_l2tp_avp_ptrs *ptrs) |
const struct ppp_l2tp_avp_list *avps, struct ppp_l2tp_avp_ptrs *ptrs) |
{ |
{ |
|
(void)avps; |
if (sess->state == SS_DYING) |
if (sess->state == SS_DYING) |
return (0); |
return (0); |
|
|
Line 2235 ppp_l2tp_handle_ICRP(struct ppp_l2tp_sess *sess,
|
Line 2256 ppp_l2tp_handle_ICRP(struct ppp_l2tp_sess *sess,
|
struct ppp_l2tp_ctrl *const ctrl = sess->ctrl; |
struct ppp_l2tp_ctrl *const ctrl = sess->ctrl; |
char buf[64]; |
char buf[64]; |
|
|
|
(void)avps; |
if (sess->state == SS_DYING) |
if (sess->state == SS_DYING) |
return (0); |
return (0); |
|
|
Line 2263 static int
|
Line 2285 static int
|
ppp_l2tp_handle_CDN(struct ppp_l2tp_sess *sess, |
ppp_l2tp_handle_CDN(struct ppp_l2tp_sess *sess, |
const struct ppp_l2tp_avp_list *avps, struct ppp_l2tp_avp_ptrs *ptrs) |
const struct ppp_l2tp_avp_list *avps, struct ppp_l2tp_avp_ptrs *ptrs) |
{ |
{ |
|
(void)avps; |
sess->peer_notified = 1; |
sess->peer_notified = 1; |
ppp_l2tp_sess_close(sess, ptrs->errresultcode->result, |
ppp_l2tp_sess_close(sess, ptrs->errresultcode->result, |
ptrs->errresultcode->error, ptrs->errresultcode->errmsg); |
ptrs->errresultcode->error, ptrs->errresultcode->errmsg); |
Line 2275 ppp_l2tp_handle_SLI(struct ppp_l2tp_sess *sess,
|
Line 2298 ppp_l2tp_handle_SLI(struct ppp_l2tp_sess *sess,
|
{ |
{ |
struct ppp_l2tp_ctrl *const ctrl = sess->ctrl; |
struct ppp_l2tp_ctrl *const ctrl = sess->ctrl; |
|
|
|
(void)avps; |
if (sess->state == SS_DYING) |
if (sess->state == SS_DYING) |
return (0); |
return (0); |
|
|
Line 2290 ppp_l2tp_handle_WEN(struct ppp_l2tp_sess *sess,
|
Line 2314 ppp_l2tp_handle_WEN(struct ppp_l2tp_sess *sess,
|
{ |
{ |
struct ppp_l2tp_ctrl *const ctrl = sess->ctrl; |
struct ppp_l2tp_ctrl *const ctrl = sess->ctrl; |
|
|
|
(void)avps; |
if (sess->state == SS_DYING) |
if (sess->state == SS_DYING) |
return (0); |
return (0); |
|
|
Line 2477 ppp_l2tp_ctrl_equal(struct ghash *g, const void *item1
|
Line 2502 ppp_l2tp_ctrl_equal(struct ghash *g, const void *item1
|
const struct ppp_l2tp_ctrl *const ctrl1 = item1; |
const struct ppp_l2tp_ctrl *const ctrl1 = item1; |
const struct ppp_l2tp_ctrl *const ctrl2 = item2; |
const struct ppp_l2tp_ctrl *const ctrl2 = item2; |
|
|
|
(void)g; |
return (ctrl1->config.tunnel_id == ctrl2->config.tunnel_id); |
return (ctrl1->config.tunnel_id == ctrl2->config.tunnel_id); |
} |
} |
|
|
Line 2485 ppp_l2tp_ctrl_hash(struct ghash *g, const void *item)
|
Line 2511 ppp_l2tp_ctrl_hash(struct ghash *g, const void *item)
|
{ |
{ |
const struct ppp_l2tp_ctrl *const ctrl = item; |
const struct ppp_l2tp_ctrl *const ctrl = item; |
|
|
|
(void)g; |
return ((u_int32_t)ctrl->config.tunnel_id); |
return ((u_int32_t)ctrl->config.tunnel_id); |
} |
} |
|
|
Line 2494 ppp_l2tp_sess_equal(struct ghash *g, const void *item1
|
Line 2521 ppp_l2tp_sess_equal(struct ghash *g, const void *item1
|
const struct ppp_l2tp_sess *const sess1 = item1; |
const struct ppp_l2tp_sess *const sess1 = item1; |
const struct ppp_l2tp_sess *const sess2 = item2; |
const struct ppp_l2tp_sess *const sess2 = item2; |
|
|
|
(void)g; |
return (sess1->config.session_id == sess2->config.session_id); |
return (sess1->config.session_id == sess2->config.session_id); |
} |
} |
|
|
Line 2502 ppp_l2tp_sess_hash(struct ghash *g, const void *item)
|
Line 2530 ppp_l2tp_sess_hash(struct ghash *g, const void *item)
|
{ |
{ |
const struct ppp_l2tp_sess *const sess = item; |
const struct ppp_l2tp_sess *const sess = item; |
|
|
|
(void)g; |
return ((u_int32_t)sess->config.session_id); |
return ((u_int32_t)sess->config.session_id); |
} |
} |
|
|
Line 2518 ppp_l2tp_ctrl_dump(struct ppp_l2tp_ctrl *ctrl,
|
Line 2547 ppp_l2tp_ctrl_dump(struct ppp_l2tp_ctrl *ctrl,
|
{ |
{ |
char buf[1024]; |
char buf[1024]; |
va_list args; |
va_list args; |
int i; | unsigned i; |
|
|
|
(void)ctrl; |
|
|
|
if ((gLogOptions & LOG_DEBUG) == 0) |
|
return; |
|
|
va_start(args, fmt); |
va_start(args, fmt); |
vsnprintf(buf, sizeof(buf), fmt, args); |
vsnprintf(buf, sizeof(buf), fmt, args); |
va_end(args); |
va_end(args); |
Line 2566 ppp_l2tp_ctrl_state_str(enum l2tp_ctrl_state state)
|
Line 2600 ppp_l2tp_ctrl_state_str(enum l2tp_ctrl_state state)
|
} |
} |
|
|
static const char * |
static const char * |
ppp_l2tp_sess_state_str(enum l2tp_ctrl_state state) | ppp_l2tp_sess_state_str(enum l2tp_sess_state state) |
{ |
{ |
switch (state) { |
switch (state) { |
case SS_WAIT_REPLY: |
case SS_WAIT_REPLY: |