mirror of
https://github.com/vyos/vyos-build.git
synced 2025-10-01 20:28:40 +02:00
wide-dhcpv6: T5387: Add a no release option '-n'.
This prevents a release signal from being sent to the ISP causing a new PD or address to be allocated. wide-dhcpv6: T5387: Renumber patch file wide-dhcpv6: T5387: Redo patch ontop of debian sources Co-authored-by: MrLenin <909621+MrLenin@users.noreply.github.com> Co-authored-by: marjohn56 <martin@queens-park.com>
This commit is contained in:
parent
65a930ebef
commit
4d33c5a3b7
@ -0,0 +1,155 @@
|
|||||||
|
From: 1vivy <1vivy@tutanota.com>
|
||||||
|
Date: Sat, 22 Jul 2023 13:07:10 -0600
|
||||||
|
Subject: wide-dhcpv6: T5387: Add a no release option '-n'.
|
||||||
|
|
||||||
|
This prevents a release signal from being sent to the ISP causing a new PD or address to be allocated.
|
||||||
|
|
||||||
|
Co-authored-by: MrLenin <909621+MrLenin@users.noreply.github.com>
|
||||||
|
Co-authored-by: marjohn56 <martin@queens-park.com>
|
||||||
|
--- wide-dhcpv6.orig/common.h
|
||||||
|
+++ wide-dhcpv6/common.h
|
||||||
|
@@ -120,6 +120,7 @@ sysdep_sa_len (const struct sockaddr *sa
|
||||||
|
extern int foreground;
|
||||||
|
extern int debug_thresh;
|
||||||
|
extern char *device;
|
||||||
|
+extern int opt_norelease;
|
||||||
|
|
||||||
|
/* search option for dhcp6_find_listval() */
|
||||||
|
#define MATCHLIST_PREFIXLEN 0x1
|
||||||
|
--- wide-dhcpv6.orig/dhcp6c.8
|
||||||
|
+++ wide-dhcpv6/dhcp6c.8
|
||||||
|
@@ -88,6 +88,10 @@ is terminated. (suits for a use in shel
|
||||||
|
Since the configuration is internally generated, you cannot provide a configuration in this mode. If you want to have different actions for the stateless DHCPv6 information, you should write an appropriate configuration and invoke
|
||||||
|
.Nm
|
||||||
|
without this option.
|
||||||
|
+.It Fl n
|
||||||
|
+Prevent Release message from being sent to DHCPv6 server when
|
||||||
|
+.Nm
|
||||||
|
+stops. This is useful for preventing a new address from being configured by the DHCPv6 server when restarting the DHCPv6 client.
|
||||||
|
.It Fl p Ar pid-file
|
||||||
|
Use
|
||||||
|
.Ar pid-file
|
||||||
|
@@ -109,18 +113,22 @@ or
|
||||||
|
.Fl i
|
||||||
|
option is specified.
|
||||||
|
.Pp
|
||||||
|
-Upon receipt of the
|
||||||
|
-.Dv SIGHUP
|
||||||
|
+Upon receipt of a
|
||||||
|
+.Dv SIGHUP ,
|
||||||
|
+.Dv SIGTERM ,
|
||||||
|
or
|
||||||
|
-.Dv SIGTERM
|
||||||
|
-signals,
|
||||||
|
-.Nm
|
||||||
|
-will remove all stateful resources from the system.
|
||||||
|
-In the former case the daemon will then reinvoke itself,
|
||||||
|
-while it will stop running in the latter case.
|
||||||
|
-In either case,
|
||||||
|
+.Dv SIGUSR1
|
||||||
|
+signal,
|
||||||
|
.Nm
|
||||||
|
-will send DHCPv6 Release messages to release resources assigned from servers.
|
||||||
|
+will remove all stateful resources from the system. After that,
|
||||||
|
+.Dv SIGHUP
|
||||||
|
+reinitializes the daemon, and
|
||||||
|
+.Dv SIGTERM
|
||||||
|
+stops the daemon. In both cases, DHCPv6 Release message will be sent to release resources assigned from servers.
|
||||||
|
+.Dv SIGUSR1
|
||||||
|
+stops the daemon as
|
||||||
|
+.Dv SIGTERM
|
||||||
|
+does though DHCPv6 Release message will not be sent.
|
||||||
|
.\"
|
||||||
|
.Sh FILES
|
||||||
|
.Bl -tag -width /etc/wide-dhcpv6/dhcp6c.conf -compact
|
||||||
|
--- wide-dhcpv6.orig/dhcp6c.c
|
||||||
|
+++ wide-dhcpv6/dhcp6c.c
|
||||||
|
@@ -84,6 +84,7 @@ static int exit_ok = 0;
|
||||||
|
static sig_atomic_t sig_flags = 0;
|
||||||
|
#define SIGF_TERM 0x1
|
||||||
|
#define SIGF_HUP 0x2
|
||||||
|
+#define SIGF_USR1 0x4
|
||||||
|
|
||||||
|
const dhcp6_mode_t dhcp6_mode = DHCP6_MODE_CLIENT;
|
||||||
|
|
||||||
|
@@ -108,6 +109,8 @@ static int ctldigestlen;
|
||||||
|
|
||||||
|
static int infreq_mode = 0;
|
||||||
|
|
||||||
|
+int opt_norelease;
|
||||||
|
+
|
||||||
|
static inline int get_val32 __P((char **, int *, u_int32_t *));
|
||||||
|
static inline int get_ifname __P((char **, int *, char *, int));
|
||||||
|
|
||||||
|
@@ -170,7 +173,7 @@ main(argc, argv)
|
||||||
|
else
|
||||||
|
progname++;
|
||||||
|
|
||||||
|
- while ((ch = getopt(argc, argv, "c:dDfik:p:P:")) != -1) {
|
||||||
|
+ while ((ch = getopt(argc, argv, "c:dDfik:np:P:")) != -1) {
|
||||||
|
switch (ch) {
|
||||||
|
case 'c':
|
||||||
|
conffile = optarg;
|
||||||
|
@@ -190,6 +193,9 @@ main(argc, argv)
|
||||||
|
case 'k':
|
||||||
|
ctlkeyfile = optarg;
|
||||||
|
break;
|
||||||
|
+ case 'n':
|
||||||
|
+ opt_norelease = 1;
|
||||||
|
+ break;
|
||||||
|
case 'p':
|
||||||
|
pid_file = optarg;
|
||||||
|
break;
|
||||||
|
@@ -395,6 +401,11 @@ client6_init()
|
||||||
|
strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
+ if (signal(SIGUSR1, client6_signal) == SIG_ERR) {
|
||||||
|
+ debug_printf(LOG_WARNING, FNAME, "failed to set signal: %s",
|
||||||
|
+ strerror(errno));
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
@@ -525,6 +536,13 @@ process_signals()
|
||||||
|
free_resources(NULL);
|
||||||
|
client6_startall(1);
|
||||||
|
}
|
||||||
|
+ if ((sig_flags & SIGF_USR1)) {
|
||||||
|
+ debug_printf(LOG_INFO, FNAME, "exit without release");
|
||||||
|
+ exit_ok = 1;
|
||||||
|
+ opt_norelease = 1;
|
||||||
|
+ free_resources(NULL);
|
||||||
|
+ check_exit();
|
||||||
|
+ }
|
||||||
|
|
||||||
|
sig_flags = 0;
|
||||||
|
}
|
||||||
|
@@ -1171,6 +1189,9 @@ client6_signal(sig)
|
||||||
|
case SIGHUP:
|
||||||
|
sig_flags |= SIGF_HUP;
|
||||||
|
break;
|
||||||
|
+ case SIGUSR1:
|
||||||
|
+ sig_flags |= SIGF_USR1;
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--- wide-dhcpv6.orig/dhcp6c_ia.c
|
||||||
|
+++ wide-dhcpv6/dhcp6c_ia.c
|
||||||
|
@@ -420,7 +420,13 @@ release_all_ia(ifp)
|
||||||
|
for (ia = TAILQ_FIRST(&iac->iadata); ia; ia = ia_next) {
|
||||||
|
ia_next = TAILQ_NEXT(ia, link);
|
||||||
|
|
||||||
|
- (void)release_ia(ia);
|
||||||
|
+ if (opt_norelease == 0) {
|
||||||
|
+ debug_printf(LOG_INFO, FNAME, "Start address "
|
||||||
|
+ "release");
|
||||||
|
+ (void)release_ia(ia);
|
||||||
|
+ } else
|
||||||
|
+ debug_printf(LOG_INFO, FNAME, "Bypassing address "
|
||||||
|
+ "release because of -n flag");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The client MUST stop using all of the addresses
|
||||||
Loading…
x
Reference in New Issue
Block a user