>>59
-sprintf(command,"/usr/sbin/iptables -t nat -A PREROUTING -p %s -d %s --dport %d -j DNAT --to %s:%d", Proto, ExtIP, ExtPort, IntIP, IntPort);
-system(command);
+//FILE *ipnat = popen("/sbin/pfctl -f -", "w");
+//if (ipnat == NULL)
+//return 0;
+snprintf(command, sizeof(command), "echo rdr pass on %s proto %s from any to %s port %d '->' %s port %d | /sbin/pfctl -a upnpd/%s-%s-%s-%d-%s-%d -f -",
+ExtIf, Proto, ExtIP, ExtPort, IntIP, IntPort,ExtIf, Proto, ExtIP, ExtPort, IntIP, IntPort);
+//fprintf(ipnat, command);
+//sprintf(command, "rdr lo0 %s/32 port %d -> %s port %d %s\n",
+//ExtIP, ExtPort, IntIP, IntPort, Proto);
+syslog(LOG_DEBUG, "%s", command);
+system(command);

+//FILE *ipnat = popen("/sbin/pfctl -rf -", "w");
+//if (ipnat == NULL)
+//return 0;
+sprintf(command,"/sbin/pfctl -a upnpd/%s-%s-%d-%s-%d-%s -F all", ExtIf, ExtIP, ExtPort, IntIP, IntPort, Proto);
+//ExtIf, ExtIP, ExtPort, IntIP, IntPort, Proto);
+//fprintf(ipnat, command);
+//sprintf(command, "rdr lo0 %s/32 port %d -> %s port %d %s\n",
+//ExtIP, ExtPort, IntIP, IntPort, Proto);
+//fprintf(ipnat, command);
+system(command);

-sprintf(command, "/usr/sbin/iptables -t nat -D PREROUTING -p %s -d %s --dport %d -j DNAT --to %s:%d", Proto, ExtIP, ExtPort, IntIP, IntPort);
-system(command);
こんな感じでパッチを書き換えてミソ。