cli: Show acceleration interface name
And allow selecting a session through it
This commit is contained in:
parent
f00ec1c6e4
commit
0ac498d7d3
3 changed files with 25 additions and 4 deletions
17
cli.c
17
cli.c
|
|
@ -451,10 +451,23 @@ static int cmd_show_session(struct cli_def *cli, const char *command, char **arg
|
||||||
for (i = 0; i < argc; i++)
|
for (i = 0; i < argc; i++)
|
||||||
{
|
{
|
||||||
unsigned int s, b_in, b_out, r;
|
unsigned int s, b_in, b_out, r;
|
||||||
|
int ifunit = -1;
|
||||||
|
|
||||||
|
if (!strncmp(argv[i], PPP_IF_PREFIX, strlen(PPP_IF_PREFIX)))
|
||||||
|
{
|
||||||
|
char *start = argv[i]+strlen(PPP_IF_PREFIX);
|
||||||
|
char *end;
|
||||||
|
long res = strtol(start, &end, 10);
|
||||||
|
if (end != start && !*end)
|
||||||
|
ifunit = res;
|
||||||
|
}
|
||||||
|
|
||||||
for (s = 0; s < MAXSESSION; s++)
|
for (s = 0; s < MAXSESSION; s++)
|
||||||
if (!strcmp(argv[i], session[s].user))
|
{
|
||||||
|
if ((ifunit >= 0 && sess_local[s].ppp_if_unit == ifunit)
|
||||||
|
|| !strcmp(argv[i], session[s].user))
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
if (s >= MAXSESSION)
|
if (s >= MAXSESSION)
|
||||||
{
|
{
|
||||||
s = atoi(argv[i]);
|
s = atoi(argv[i]);
|
||||||
|
|
@ -473,6 +486,8 @@ static int cmd_show_session(struct cli_def *cli, const char *command, char **arg
|
||||||
cli_print(cli, "\tRemote ID:\t%d", session[s].far);
|
cli_print(cli, "\tRemote ID:\t%d", session[s].far);
|
||||||
if (session[s].bundle)
|
if (session[s].bundle)
|
||||||
cli_print(cli, "\tBundle ID:\t%d (%d)", session[s].bundle, bundle[session[s].bundle].num_of_links);
|
cli_print(cli, "\tBundle ID:\t%d (%d)", session[s].bundle, bundle[session[s].bundle].num_of_links);
|
||||||
|
if (sess_local[s].ppp_if_unit >= 0)
|
||||||
|
cli_print(cli, "\tInterface:\tppp%d", sess_local[s].ppp_if_unit);
|
||||||
cli_print(cli, "\tPPP Phase:\t%s", ppp_phase(session[s].ppp.phase));
|
cli_print(cli, "\tPPP Phase:\t%s", ppp_phase(session[s].ppp.phase));
|
||||||
switch (session[s].ppp.phase)
|
switch (session[s].ppp.phase)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
6
l2tpns.c
6
l2tpns.c
|
|
@ -49,8 +49,6 @@
|
||||||
#define PPPIOCUNBRIDGECHAN _IO('t', 54)
|
#define PPPIOCUNBRIDGECHAN _IO('t', 54)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PPP_IF_PREFIX "ppp"
|
|
||||||
|
|
||||||
#include "md5.h"
|
#include "md5.h"
|
||||||
#include "dhcp6.h"
|
#include "dhcp6.h"
|
||||||
#include "l2tpns.h"
|
#include "l2tpns.h"
|
||||||
|
|
@ -1228,6 +1226,7 @@ static int create_kernel_accel(sessionidt s)
|
||||||
sess_local[s].pppox_fd = pppox_fd;
|
sess_local[s].pppox_fd = pppox_fd;
|
||||||
sess_local[s].ppp_chan_fd = ppp_chan_fd;
|
sess_local[s].ppp_chan_fd = ppp_chan_fd;
|
||||||
sess_local[s].ppp_if_fd = ppp_if_fd;
|
sess_local[s].ppp_if_fd = ppp_if_fd;
|
||||||
|
sess_local[s].ppp_if_unit = ifunit;
|
||||||
sess_local[s].ppp_if_idx = ifr.ifr_ifindex;
|
sess_local[s].ppp_if_idx = ifr.ifr_ifindex;
|
||||||
|
|
||||||
dhcpv6_listen(ifr.ifr_ifindex);
|
dhcpv6_listen(ifr.ifr_ifindex);
|
||||||
|
|
@ -1256,6 +1255,7 @@ static int delete_kernel_accel(sessionidt s)
|
||||||
|
|
||||||
LOG(3, s, session[s].tunnel, "Stopping kernel-accelerated support for %u:%u\n", session[s].tunnel, s);
|
LOG(3, s, session[s].tunnel, "Stopping kernel-accelerated support for %u:%u\n", session[s].tunnel, s);
|
||||||
|
|
||||||
|
sess_local[s].ppp_if_unit = -1;
|
||||||
sess_local[s].ppp_if_idx = 0;
|
sess_local[s].ppp_if_idx = 0;
|
||||||
|
|
||||||
ioctl(sess_local[s].ppp_chan_fd, PPPIOCDISCONN);
|
ioctl(sess_local[s].ppp_chan_fd, PPPIOCDISCONN);
|
||||||
|
|
@ -3666,6 +3666,7 @@ static void sessionclear(sessionidt s)
|
||||||
sess_local[s].pppox_fd = -1;
|
sess_local[s].pppox_fd = -1;
|
||||||
sess_local[s].ppp_chan_fd = -1;
|
sess_local[s].ppp_chan_fd = -1;
|
||||||
sess_local[s].ppp_if_fd = -1;
|
sess_local[s].ppp_if_fd = -1;
|
||||||
|
sess_local[s].ppp_if_unit = -1;
|
||||||
memset(&cli_session_actions[s], 0, sizeof(cli_session_actions[s]));
|
memset(&cli_session_actions[s], 0, sizeof(cli_session_actions[s]));
|
||||||
|
|
||||||
session[s].tunnel = T_FREE; // Mark it as free.
|
session[s].tunnel = T_FREE; // Mark it as free.
|
||||||
|
|
@ -6229,6 +6230,7 @@ static void initdata(int optdebug, char *optconfig)
|
||||||
sess_local[i].pppox_fd = -1;
|
sess_local[i].pppox_fd = -1;
|
||||||
sess_local[i].ppp_chan_fd = -1;
|
sess_local[i].ppp_chan_fd = -1;
|
||||||
sess_local[i].ppp_if_fd = -1;
|
sess_local[i].ppp_if_fd = -1;
|
||||||
|
sess_local[i].ppp_if_unit = -1;
|
||||||
}
|
}
|
||||||
session[MAXSESSION - 1].next = 0;
|
session[MAXSESSION - 1].next = 0;
|
||||||
sessionfree = 1;
|
sessionfree = 1;
|
||||||
|
|
|
||||||
6
l2tpns.h
6
l2tpns.h
|
|
@ -31,6 +31,8 @@
|
||||||
// Tunnel Id reserved for pppoe
|
// Tunnel Id reserved for pppoe
|
||||||
#define TUNNEL_ID_PPPOE 1
|
#define TUNNEL_ID_PPPOE 1
|
||||||
|
|
||||||
|
#define PPP_IF_PREFIX "ppp"
|
||||||
|
|
||||||
#define RADIUS_SHIFT 6
|
#define RADIUS_SHIFT 6
|
||||||
#define RADIUS_FDS (1 << RADIUS_SHIFT)
|
#define RADIUS_FDS (1 << RADIUS_SHIFT)
|
||||||
#define RADIUS_MASK ((1 << RADIUS_SHIFT) - 1)
|
#define RADIUS_MASK ((1 << RADIUS_SHIFT) - 1)
|
||||||
|
|
@ -459,7 +461,9 @@ typedef struct
|
||||||
|
|
||||||
// ppp interface
|
// ppp interface
|
||||||
int ppp_if_fd;
|
int ppp_if_fd;
|
||||||
// ppp interface index
|
// ppp interface number (ppp%d)
|
||||||
|
int ppp_if_unit;
|
||||||
|
// ppp interface index (for rtnetlink etc.)
|
||||||
int ppp_if_idx;
|
int ppp_if_idx;
|
||||||
} sessionlocalt;
|
} sessionlocalt;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue