agetty: Watch only protocol requested by issue escapes
To decrease number of reloads, watch only protocol requested by \4 and \6 escapes in issue file. Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
This commit is contained in:
parent
c5955394a8
commit
36c55a8987
|
@ -153,6 +153,7 @@
|
||||||
# define AGETTY_RELOAD_FDNONE -2 /* uninitialized fd */
|
# define AGETTY_RELOAD_FDNONE -2 /* uninitialized fd */
|
||||||
static int inotify_fd = AGETTY_RELOAD_FDNONE;
|
static int inotify_fd = AGETTY_RELOAD_FDNONE;
|
||||||
static int netlink_fd = AGETTY_RELOAD_FDNONE;
|
static int netlink_fd = AGETTY_RELOAD_FDNONE;
|
||||||
|
static __u32 netlink_groups;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1555,7 +1556,7 @@ static void open_netlink(void)
|
||||||
if (sock >= 0) {
|
if (sock >= 0) {
|
||||||
addr.nl_family = AF_NETLINK;
|
addr.nl_family = AF_NETLINK;
|
||||||
addr.nl_pid = getpid();
|
addr.nl_pid = getpid();
|
||||||
addr.nl_groups = RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;
|
addr.nl_groups = netlink_groups;
|
||||||
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
||||||
close(sock);
|
close(sock);
|
||||||
else
|
else
|
||||||
|
@ -1738,6 +1739,9 @@ static void print_issue_file(struct options *op, struct termios *tp)
|
||||||
#ifdef ISSUEDIR_SUPPORT
|
#ifdef ISSUEDIR_SUPPORT
|
||||||
int dd = -1, nfiles = 0, i;
|
int dd = -1, nfiles = 0, i;
|
||||||
struct dirent **namelist = NULL;
|
struct dirent **namelist = NULL;
|
||||||
|
#endif
|
||||||
|
#ifdef AGETTY_RELOAD
|
||||||
|
netlink_groups = 0;
|
||||||
#endif
|
#endif
|
||||||
if ((op->flags & F_NONL) == 0) {
|
if ((op->flags & F_NONL) == 0) {
|
||||||
/* Issue not in use, start with a new line. */
|
/* Issue not in use, start with a new line. */
|
||||||
|
@ -1829,6 +1833,10 @@ static void print_issue_file(struct options *op, struct termios *tp)
|
||||||
if (dd >= 0)
|
if (dd >= 0)
|
||||||
close(dd);
|
close(dd);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef AGETTY_RELOAD
|
||||||
|
if (netlink_groups != 0)
|
||||||
|
open_netlink();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif /* ISSUE_SUPPORT */
|
#endif /* ISSUE_SUPPORT */
|
||||||
|
|
||||||
|
@ -2633,10 +2641,6 @@ static void output_special_char(unsigned char c, struct options *op,
|
||||||
struct ifaddrs *addrs = NULL;
|
struct ifaddrs *addrs = NULL;
|
||||||
char iface[128];
|
char iface[128];
|
||||||
|
|
||||||
#ifdef AGETTY_RELOAD
|
|
||||||
open_netlink();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (getifaddrs(&addrs))
|
if (getifaddrs(&addrs))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2646,6 +2650,11 @@ static void output_special_char(unsigned char c, struct options *op,
|
||||||
output_iface_ip(addrs, NULL, family);
|
output_iface_ip(addrs, NULL, family);
|
||||||
|
|
||||||
freeifaddrs(addrs);
|
freeifaddrs(addrs);
|
||||||
|
|
||||||
|
if (c == '4')
|
||||||
|
netlink_groups |= RTMGRP_IPV4_IFADDR;
|
||||||
|
else
|
||||||
|
netlink_groups |= RTMGRP_IPV6_IFADDR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue