cli: Show acceleration interface name

And allow selecting a session through it
This commit is contained in:
Samuel Thibault 2024-01-18 02:00:21 +01:00
parent f00ec1c6e4
commit 0ac498d7d3
3 changed files with 25 additions and 4 deletions

17
cli.c
View file

@ -451,10 +451,23 @@ static int cmd_show_session(struct cli_def *cli, const char *command, char **arg
for (i = 0; i < argc; i++)
{
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++)
if (!strcmp(argv[i], session[s].user))
{
if ((ifunit >= 0 && sess_local[s].ppp_if_unit == ifunit)
|| !strcmp(argv[i], session[s].user))
break;
}
if (s >= MAXSESSION)
{
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);
if (session[s].bundle)
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));
switch (session[s].ppp.phase)
{

View file

@ -49,8 +49,6 @@
#define PPPIOCUNBRIDGECHAN _IO('t', 54)
#endif
#define PPP_IF_PREFIX "ppp"
#include "md5.h"
#include "dhcp6.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].ppp_chan_fd = ppp_chan_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;
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);
sess_local[s].ppp_if_unit = -1;
sess_local[s].ppp_if_idx = 0;
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].ppp_chan_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]));
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].ppp_chan_fd = -1;
sess_local[i].ppp_if_fd = -1;
sess_local[i].ppp_if_unit = -1;
}
session[MAXSESSION - 1].next = 0;
sessionfree = 1;

View file

@ -31,6 +31,8 @@
// Tunnel Id reserved for pppoe
#define TUNNEL_ID_PPPOE 1
#define PPP_IF_PREFIX "ppp"
#define RADIUS_SHIFT 6
#define RADIUS_FDS (1 << RADIUS_SHIFT)
#define RADIUS_MASK ((1 << RADIUS_SHIFT) - 1)
@ -459,7 +461,9 @@ typedef struct
// ppp interface
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;
} sessionlocalt;