#include <sys/types.h>
#include <sys/sysctl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
int main(int argc, char **argv) {
    char cmd[160];
    if (argc < 2) return 1;
    if (!strcmp(argv[1], "ccd")) {
        static char p0[] = "/dev/vn0s0a", p1[] = "/dev/vn1s0a";
        static char *arr[2];
        int n = atoi(argv[2]), ctl = argc > 3 && !strcmp(argv[3], "ctl");
        arr[0] = p0; arr[1] = p1;
        snprintf(cmd, sizeof cmd, "paths %lx %lx",
                 (unsigned long)(uintptr_t)arr, (unsigned long)(uintptr_t)p1);
        if (sysctlbyname("kern.dfmiscgo", NULL, NULL, cmd, strlen(cmd)) < 0)
            { perror("paths"); return 1; }
        snprintf(cmd, sizeof cmd, "%s %d", ctl ? "ccdctl" : "ccdleak", n);
    } else if (!strcmp(argv[1], "isopt")) {
        static char d[] = "CRC32C";
        static char buf[1024];   /* big enough for kernel isc_opt_t */
        memset(buf, 0, sizeof(buf));
        *(char **)(buf + 0x40) = d;   /* offsetof(isc_opt_t, headerDigest) */
        snprintf(cmd, sizeof cmd, "isopt %lx", (unsigned long)(uintptr_t)buf);
    } else if (!strcmp(argv[1], "race")) {
        static char a0[]="/dev/vn2s0a", a1[]="/dev/vn3s0a";
        static char b0[]="/dev/vn0s0a", b1[]="/dev/vn1s0a";
        static char *arra[2], *arrb[2];
        int n = atoi(argv[2]);
        arra[0]=a0; arra[1]=a1; arrb[0]=b0; arrb[1]=b1;
        snprintf(cmd, sizeof cmd, "race %lx %lx %lx %lx %d",
                 (unsigned long)(uintptr_t)arra, (unsigned long)(uintptr_t)arra,
                 (unsigned long)(uintptr_t)arrb, (unsigned long)(uintptr_t)arrb, n);
    } else {
        snprintf(cmd, sizeof cmd, "%s", argv[1]);
        for (int i = 2; i < argc; i++) {
            strlcat(cmd, " ", sizeof cmd);
            strlcat(cmd, argv[i], sizeof cmd);
        }
    }
    if (sysctlbyname("kern.dfmiscgo", NULL, NULL, cmd, strlen(cmd)) < 0) {
        perror(cmd); return 1;
    }
    return 0;
}
