diff -up opt/vyatta/share/perl5/Vyatta/DhcpPd.pm.orig opt/vyatta/share/perl5/Vyatta/DhcpPd.pm
--- opt/vyatta/share/perl5/Vyatta/DhcpPd.pm.orig	2022-03-27 11:08:06.741105905 +0200
+++ opt/vyatta/share/perl5/Vyatta/DhcpPd.pm	2022-03-27 13:05:08.168814843 +0200
@@ -10,7 +10,7 @@
 our @EXPORT = qw(get_base_dir get_radvd_conffile get_radvd_gen 
                  get_commit_notdone start_dhcpv6_daemon stop_dhcpv6_daemon
                  radvd_gen_add radvd_gen_del get_dhcp6c_pidfile 
-                 get_dhcp6c_conffile restart_radvd stop_radvd sysctl_set_ra
+                 get_dhcp6c_conffile get_pd_interfaces restart_radvd stop_radvd sysctl_set_ra
                  start_pd_daemon sighup_pd_daemon stop_pd_daemon
                  find_ipv6_addr pd_write_file validate_sla_id validate_ifid
                  pd_clear_intf_resolv_conf pd_add_to_resolv_conf
@@ -52,7 +52,7 @@
 sub get_dhcp6c_pidfile {
     my $intf = shift;
     
-    return "$basedir/dhcp6c-$intf-pd.pid";
+    return "$basedir/dhcp6c_combined-pd.pid";
 }
 
 sub get_dhcp6c_conffile {
@@ -61,6 +61,32 @@
     return "$basedir/dhcp6c-$intf-pd.conf";
 }
 
+sub get_dhcp6c_combined_conffile {
+    my $intf = shift;
+    
+    return "$basedir/dhcp6c_combined-pd.conf";
+}
+
+sub get_pd_interfaces {
+    my $interfaces = '';
+
+    opendir my $dir, $basedir
+        or syslog(LOG_ERR, "Can't open $basedir: $!\n");
+    my @confs = grep { /^dhcp6c-.*-pd\.conf/ } readdir($dir);
+    closedir $dir;
+
+    my $first = 0;
+    foreach my $conf (@confs) {
+        chomp $conf;
+        if ($conf =~ /dhcp6c-(.+)-pd\.conf/) {
+            my $ifname = $1;
+            if ($first++) { $interfaces .= ' '; }
+            $interfaces .= "$ifname";
+        }
+    }
+    return $interfaces;
+}
+
 sub get_radvd_conffile {
     return '/etc/radvd.conf';
 }
@@ -209,8 +235,26 @@
     unlink($pd_logfile);
     printf("Starting new daemon...\n");
     my $pd_pidfile = get_dhcp6c_pidfile($ifname);
-    my $pd_conffile = get_dhcp6c_conffile($ifname);
-    my $cmd = "$setsid $pd_daemon -c $pd_conffile -p $pd_pidfile -df $ifname";
+    my $pd_conffile = get_dhcp6c_combined_conffile($ifname);
+    my $interfaces = get_pd_interfaces();
+
+    # combine the config files as to have only one
+    # daemon actually running to prevent socket in use.
+    my $combinedconf = '';
+    opendir my $dir, $basedir
+        or syslog(LOG_ERR, "Can't open $basedir: $!\n");
+    my @confs = grep { /^dhcp6c-.*-pd\.conf/ } readdir($dir);
+    closedir $dir;
+    foreach my $conf (@confs) {
+        chomp $conf;
+
+        open my $fh, '<', "$basedir/$conf" or syslog(LOG_ERR, "Can't open file $!");
+        $combinedconf .= do { local $/; <$fh> };
+        close $fh;
+    }
+    pd_write_file($pd_conffile, $combinedconf);
+
+    my $cmd = "$setsid $pd_daemon -c $pd_conffile -p $pd_pidfile -df $interfaces";
     system("$cmd 1> $pd_logfile 2>&1 &");
 }
 
