+static int do_prl(int argc, char **argv)
+{
+ struct ip_tunnel_prl p;
+ int count = 0;
+ int devname = 0;
+ int cmd = 0;
+ char medium[IFNAMSIZ];
+
+ memset(&p, 0, sizeof(p));
+ memset(&medium, 0, sizeof(medium));
+
+ while (argc > 0) {
+ if (strcmp(*argv, "prl-default") == 0) {
+ NEXT_ARG();
+ cmd = SIOCADDPRL;
+ p.addr = get_addr32(*argv);
+ p.flags |= PRL_DEFAULT;
+ count++;
+ } else if (strcmp(*argv, "prl-nodefault") == 0) {
+ NEXT_ARG();
+ cmd = SIOCADDPRL;
+ p.addr = get_addr32(*argv);
+ count++;
+ } else if (strcmp(*argv, "prl-delete") == 0) {
+ NEXT_ARG();
+ cmd = SIOCDELPRL;
+ p.addr = get_addr32(*argv);
+ count++;
+ } else if (strcmp(*argv, "dev") == 0) {
+ NEXT_ARG();
+ strncpy(medium, *argv, IFNAMSIZ-1);
+ devname++;
+ } else {
+ fprintf(stderr,"%s: Invalid PRL parameter.\n", *argv);
+ exit(-1);
+ }
+ if (count > 1) {
+ fprintf(stderr,"One PRL entry at a time.\n");
+ exit(-1);
+ }
+ argc--; argv++;
+ }
+ if (devname == 0) {
+ fprintf(stderr, "Must specify dev.\n");
+ exit(-1);
+ }
+
+ return tnl_prl_ioctl(cmd, medium, &p);
+}
+