Minor style issues.
> + if (*argv && strcmp(*argv, "cookie") == 0) {
> + int slen;
slen is strlen() and that returns size_t not int.
> +
> + NEXT_ARG();
> + slen = strlen(*argv);
> + if (slen > (TC_COOKIE_MAX_SIZE*2))
No extra (), and space around *
> + invarg("cookie cannot exceed %d\n",
> + *argv);
> +
> + if (hex2mem(*argv, act_ck, slen/2) < 0)
Space around / operator
> + invarg("cookie must be a hex string\n",
> + *argv);
> +
> + act_ck_len = slen;
> + argc--;
> + argv++;
> + }
> +
> + if (act_ck_len)
> + addattr_l(n, MAX_MSG, TCA_ACT_COOKIE,
> + (const void *)&act_ck, act_ck_len);
Cast to void * is not necessary.