ipset-dns: support simultaneously populating IPv4 and IPv6 sets
[openwrt.git] / package / network / services / ipset-dns / patches / 100-simultaneous-ipv4-ipv6.patch
1 --- a/ipset-dns.c
2 +++ b/ipset-dns.c
3 @@ -307,19 +307,20 @@ int main(int argc, char *argv[]) 
4         struct timeval tv;
5         char msg[512];
6         char ip[INET6_ADDRSTRLEN];
7 -       char *ipset;
8 +       char *ipset, *ipset6;
9         int listen_sock, upstream_sock;
10         int pos, i, size, af;
11         socklen_t len;
12         size_t received;
13         pid_t child;
14         
15 -       if (argc != 4) {
16 -               fprintf(stderr, "Usage: %s ipset port upstream\n", argv[0]);
17 +       if (argc != 5) {
18 +               fprintf(stderr, "Usage: %s ipv4-ipset ipv6-ipset port upstream\n", argv[0]);
19                 return 1;
20         }
21  
22         ipset = argv[1];
23 +       ipset6 = argv[2];
24  
25         listen_sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
26         if (listen_sock < 0) {
27 @@ -329,7 +330,7 @@ int main(int argc, char *argv[]) 
28  
29         memset(&listen_addr, 0, sizeof(listen_addr));
30         listen_addr.sin_family = AF_INET;
31 -       listen_addr.sin_port = htons(atoi(argv[2]));
32 +       listen_addr.sin_port = htons(atoi(argv[3]));
33         listen_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
34         i = 1;
35         setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
36 @@ -341,7 +342,7 @@ int main(int argc, char *argv[]) 
37         memset(&upstream_addr, 0, sizeof(upstream_addr));
38         upstream_addr.sin_family = AF_INET;
39         upstream_addr.sin_port = htons(53);
40 -       inet_aton(argv[3], &upstream_addr.sin_addr);
41 +       inet_aton(argv[4], &upstream_addr.sin_addr);
42         
43         /* TODO: Put all of the below code in several forks all listening on the same sock. */
44  
45 @@ -434,8 +435,11 @@ int main(int argc, char *argv[]) 
46                                 continue;
47                         }
48  
49 +                       if ((af == AF_INET && !*ipset) || (af == AF_INET6 && !*ipset6))
50 +                               continue;
51 +
52                         printf("%s: %s\n", answer.dotted, ip);
53 -                       if (add_to_ipset(ipset, answer.rdata, af) < 0)
54 +                       if (add_to_ipset((af == AF_INET) ? ipset : ipset6, answer.rdata, af) < 0)
55                                 perror("add_to_ipset");
56                 }
57