]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
DHCP6: Add disabled code to allow packet replay
authorRoy Marples <roy@marples.name>
Tue, 17 Dec 2019 22:23:56 +0000 (22:23 +0000)
committerRoy Marples <roy@marples.name>
Tue, 17 Dec 2019 22:25:19 +0000 (22:25 +0000)
I get bored of adding similar code from time to time just to
aid debugging, so let's just add it in.

Someone else might find it useful too.

src/dhcp6.c

index aca4a8aafa15cd614bbd7dd9956fd7eee0d654de..5c9188789522127b3703a5bb0d2b42efe398597a 100644 (file)
@@ -3581,6 +3581,42 @@ dhcp6_recvmsg(struct dhcpcd_ctx *ctx, struct msghdr *msg, struct ipv6_addr *ia)
                ifp = ifp1;
        }
 
+#if 0
+       /*
+        * Handy code to inject raw DHCPv6 packets over responses
+        * from our server.
+        * This allows me to take a 3rd party wireshark trace and
+        * replay it in my code.
+        */
+       static int replyn = 0;
+       char fname[PATH_MAX], tbuf[64 * 1024];
+       int fd;
+       ssize_t tlen;
+       uint8_t *si1, *si2;
+       uint16_t si_len1, si_len2;
+
+       snprintf(fname, sizeof(fname),
+           "/tmp/dhcp6.reply%d.raw", replyn++);
+       fd = open(fname, O_RDONLY, 0);
+       if (fd == -1) {
+               logerr("%s: open `%s'", __func__, fname);
+               return;
+       }
+       tlen = read(fd, tbuf, sizeof(tbuf));
+       if (tlen == -1)
+               logerr("%s: read `%s'", __func__, fname);
+       close(fd);
+
+       /* Copy across ServerID so we can work with our own server. */
+       si1 = dhcp6_findmoption(r, len, D6_OPTION_SERVERID, &si_len1);
+       si2 = dhcp6_findmoption(tbuf, (size_t)tlen,
+           D6_OPTION_SERVERID, &si_len2);
+       if (si1 != NULL && si2 != NULL && si_len1 == si_len2)
+               memcpy(si2, si1, si_len2);
+       r = (struct dhcp6_message *)tbuf;
+       len = (size_t)tlen;
+#endif
+
        dhcp6_recvif(ifp, sfrom, r, len);
 }