Lines Matching refs:nat
58 static ipnat_t *nat = NULL;
143 while ((nat = nattop) != NULL) {
144 if (nat->in_v[0] == 0)
145 nat->in_v[0] = 4;
146 if (nat->in_v[1] == 0)
147 nat->in_v[1] = nat->in_v[0];
148 nattop = nat->in_next;
149 err = (*nataddfunc)(natfd, natioctlfunc, nat);
150 free(nat);
187 no: IPNY_NO { nat->in_flags |= IPN_NO; }
196 if (nat->in_v[0] == 0 && $5.v != 0)
197 nat->in_v[0] = $5.v;
198 else if (nat->in_v[0] == 0 && $3.v != 0)
199 nat->in_v[0] = $3.v;
200 if (nat->in_v[1] == 0 && $5.v != 0)
201 nat->in_v[1] = $5.v;
202 else if (nat->in_v[1] == 0 && $3.v != 0)
203 nat->in_v[1] = $3.v;
204 nat->in_osrcatype = $3.t;
205 bcopy(&$3.a, &nat->in_osrc.na_addr[0],
207 bcopy(&$3.m, &nat->in_osrc.na_addr[1],
209 nat->in_nsrcatype = $5.t;
210 nat->in_nsrcafunc = $5.u;
211 bcopy(&$5.a, &nat->in_nsrc.na_addr[0],
213 bcopy(&$5.m, &nat->in_nsrc.na_addr[1],
221 if (nat->in_v[1] == 0 && $5.v != 0)
222 nat->in_v[1] = $5.v;
223 else if (nat->in_v[0] == 0 && $3.v != 0)
224 nat->in_v[0] = $3.v;
225 if (nat->in_v[0] == 0 && $5.v != 0)
226 nat->in_v[0] = $5.v;
227 else if (nat->in_v[1] == 0 && $3.v != 0)
228 nat->in_v[1] = $3.v;
229 nat->in_osrcatype = $3.t;
230 bcopy(&$3.a, &nat->in_osrc.na_addr[0],
232 bcopy(&$3.m, &nat->in_osrc.na_addr[1],
234 nat->in_nsrcatype = $5.t;
235 nat->in_nsrcafunc = $5.u;
236 bcopy(&$5.a, &nat->in_nsrc.na_addr[0],
238 bcopy(&$5.m, &nat->in_nsrc.na_addr[1],
244 { if (nat->in_v[0] == 0)
245 nat->in_v[0] = $4.v;
246 nat->in_osrcatype = $4.t;
247 bcopy(&$4.a, &nat->in_osrc.na_addr[0],
249 bcopy(&$4.m, &nat->in_osrc.na_addr[1],
257 if (nat->in_v[0] == 0 && $5.v != 0)
258 nat->in_v[0] = $5.v;
259 else if (nat->in_v[0] == 0 && $3 != 0)
260 nat->in_v[0] = ftov($3);
261 if (nat->in_v[1] == 0 && $5.v != 0)
262 nat->in_v[1] = $5.v;
263 else if (nat->in_v[1] == 0 && $3 != 0)
264 nat->in_v[1] = ftov($3);
265 nat->in_nsrcatype = $5.t;
266 nat->in_nsrcafunc = $5.u;
267 bcopy(&$5.a, &nat->in_nsrc.na_addr[0],
269 bcopy(&$5.m, &nat->in_nsrc.na_addr[1],
275 { nat->in_v[0] = ftov($4);
281 if (nat->in_v[0] == 0 && $5.v != 0)
282 nat->in_v[0] = $5.v;
283 else if (nat->in_v[0] == 0 && $3 != 0)
284 nat->in_v[0] = ftov($3);
285 if (nat->in_v[1] == 0 && $5.v != 0)
286 nat->in_v[1] = $5.v;
287 else if (nat->in_v[1] == 0 && $3 != 0)
288 nat->in_v[1] = ftov($3);
289 nat->in_nsrcatype = $5.t;
290 nat->in_nsrcafunc = $5.u;
291 bcopy(&$5.a, &nat->in_nsrc.na_addr[0],
293 bcopy(&$5.m, &nat->in_nsrc.na_addr[1],
304 if (nat->in_v[0] == 0 && $5.v != 0)
305 nat->in_v[0] = $5.v;
306 else if (nat->in_v[0] == 0 && $3.v != 0)
307 nat->in_v[0] = $3.v;
308 if (nat->in_v[1] == 0 && $5.v != 0)
309 nat->in_v[1] = $5.v;
310 else if (nat->in_v[1] == 0 && $3.v != 0)
311 nat->in_v[1] = $3.v;
312 nat->in_osrcatype = $3.t;
313 bcopy(&$3.a, &nat->in_osrc.na_addr[0],
315 bcopy(&$3.m, &nat->in_osrc.na_addr[1],
317 nat->in_nsrcatype = $5.t;
318 nat->in_nsrcafunc = $5.u;
319 bcopy(&$5.a, &nat->in_nsrc.na_addr[0],
321 bcopy(&$5.m, &nat->in_nsrc.na_addr[1],
327 { if (nat->in_v[0] == 0)
328 nat->in_v[0] = $5.v;
329 if (nat->in_v[1] == 0)
330 nat->in_v[1] = $5.v;
331 nat->in_osrcatype = $5.t;
332 bcopy(&$5.a, &nat->in_osrc.na_addr[0],
334 bcopy(&$5.m, &nat->in_osrc.na_addr[1],
344 if (nat->in_v[0] == 0) {
346 nat->in_v[0] = ftov($3.f);
348 nat->in_v[0] = ftov($6);
350 nat->in_odstatype = $3.t;
351 bcopy(&$3.a, &nat->in_odst.na_addr[0],
353 bcopy(&$3.m, &nat->in_odst.na_addr[1],
359 { if (nat->in_v[0] == 0)
360 nat->in_v[0] = ftov($4.f);
361 nat->in_odstatype = $4.t;
362 bcopy(&$4.a, &nat->in_odst.na_addr[0],
364 bcopy(&$4.m, &nat->in_odst.na_addr[1],
372 if (nat->in_v[0] == 0) {
374 nat->in_v[0] = ftov($3);
376 nat->in_v[0] = ftov($5);
381 { nat->in_v[0] = ftov($4);
389 { if (nat->in_v[0] == 0)
390 nat->in_v[0] = ftov($4);
391 if (nat->in_redir & NAT_MAP)
395 nat->in_redir |= NAT_REWRITE;
400 { if (nat->in_v[0] == 0)
401 nat->in_v[0] = ftov($4);
402 if (nat->in_redir & NAT_MAP) {
404 nat->in_pr[0] = IPPROTO_UDP;
407 nat->in_pr[1] = IPPROTO_UDP;
409 nat->in_flags &= ~IPN_TCP;
441 inout: IPNY_IN { nat->in_redir = NAT_REDIRECT; }
442 | IPNY_OUT { nat->in_redir = NAT_MAP; }
450 { nat->in_nsrc.na_addr[0] = $2.a;
451 nat->in_nsrc.na_addr[1] = $2.m;
452 nat->in_nsrc.na_atype = $2.t;
454 nat->in_nsrc.na_type = $2.u;
455 nat->in_nsrc.na_subtype = $2.s;
456 nat->in_nsrc.na_num = $2.n;
458 nat->in_nsports[0] = $3.p1;
459 nat->in_nsports[1] = $3.p2;
460 nat->in_ndst.na_addr[0] = $5.a;
461 nat->in_ndst.na_addr[1] = $5.m;
462 nat->in_ndst.na_atype = $5.t;
464 nat->in_ndst.na_type = $5.u;
465 nat->in_ndst.na_subtype = $5.s;
466 nat->in_ndst.na_num = $5.n;
468 nat->in_ndports[0] = $6.p1;
469 nat->in_ndports[1] = $6.p2;
474 { nat->in_nsrc.na_addr[0] = $2.a;
477 nat->in_nsrc.na_addr[1] = $2.m;
478 nat->in_nsports[0] = $4;
479 nat->in_nsports[1] = $4;
481 nat->in_ndst.na_addr[0] = $6.a;
482 nat->in_ndst.na_addr[1] = $6.m;
485 nat->in_ndports[0] = $8;
486 nat->in_ndports[1] = $8;
488 nat->in_redir |= NAT_DIVERTUDP;
505 nat->in_flags |= IPN_FIXEDSPORT;
516 nat->in_flags |= IPN_FIXEDDPORT;
524 | ',' { if (!(nat->in_flags & IPN_TCPUDP))
534 pos = addname(&nat, $4);
535 nat->in_plabel = pos;
536 if (nat->in_dcmp == 0) {
537 nat->in_odport = $3;
538 } else if ($3 != nat->in_odport) {
541 nat->in_ndport = $3;
547 pos = addname(&nat, $4);
548 nat->in_plabel = pos;
552 nat->in_odport = ntohs(pnum);
553 nat->in_ndport = ntohs(pnum);
560 pos = addname(&nat, $4);
561 nat->in_plabel = pos;
562 if (nat->in_dcmp == 0) {
563 nat->in_odport = $3;
564 } else if ($3 != nat->in_odport) {
567 nat->in_ndport = $3;
569 nat->in_pconfig = addname(&nat, $8);
575 pos = addname(&nat, $4);
576 nat->in_plabel = pos;
580 nat->in_odport = ntohs(pnum);
581 nat->in_ndport = ntohs(pnum);
583 pos = addname(&nat, $8);
584 nat->in_pconfig = pos;
591 | proto { if (nat->in_pr[0] != 0 ||
592 nat->in_pr[1] != 0 ||
593 nat->in_flags & IPN_TCPUDP)
597 | IPNY_TCPUDP { if (nat->in_pr[0] != 0 ||
598 nat->in_pr[1] != 0 ||
599 nat->in_flags & IPN_TCPUDP)
601 nat->in_flags |= IPN_TCPUDP;
602 nat->in_pr[0] = 0;
603 nat->in_pr[1] = 0;
605 | IPNY_TCP '/' IPNY_UDP { if (nat->in_pr[0] != 0 ||
606 nat->in_pr[1] != 0 ||
607 nat->in_flags & IPN_TCPUDP)
609 nat->in_flags |= IPN_TCPUDP;
610 nat->in_pr[0] = 0;
611 nat->in_pr[1] = 0;
628 nat->in_flags |= IPN_SIPRANGE;
640 nat->in_flags |= IPN_SIPRANGE;
647 { nat->in_flags |= IPN_SPLIT;
652 nat->in_ndstip6 = $1.a;
653 nat->in_ndstmsk6 = $4.a;
654 nat->in_ndstatype = FRI_SPLIT;
658 nat->in_ndstip6 = $1.a;
659 nat->in_ndstmsk6 = $1.m;
660 nat->in_ndst.na_atype = $1.t;
689 nat->in_flags |= IPN_DIPRANGE;
701 nat->in_flags |= IPN_DIPRANGE;
716 $$.n = addname(&nat, $3);
742 dport: | port portpair { nat->in_odport = $2.p1;
744 nat->in_dtop = $2.p1;
746 nat->in_dtop = $2.p2;
750 nport: | port portpair { nat->in_dpmin = $2.p1;
751 nat->in_dpnext = $2.p1;
752 nat->in_dpmax = $2.p2;
753 nat->in_ndport = $2.p1;
754 if (nat->in_dtop == 0)
755 nat->in_dtop = $2.p2;
757 | port '=' portspec { nat->in_dpmin = $3;
758 nat->in_dpnext = $3;
759 nat->in_ndport = $3;
760 if (nat->in_dtop == 0)
761 nat->in_dtop = nat->in_odport;
762 nat->in_flags |= IPN_FIXEDDPORT;
766 ports: | IPNY_PORTS YY_NUMBER { nat->in_spmin = $2; }
767 | IPNY_PORTS IPNY_AUTO { nat->in_flags |= IPN_AUTOPORTMAP; }
770 mapit: IPNY_MAP { nat->in_redir = NAT_MAP; }
771 | IPNY_BIMAP { nat->in_redir = NAT_BIMAP; }
774 rdrit: IPNY_RDR { nat->in_redir = NAT_REDIRECT; }
778 IPNY_MAPBLOCK { nat->in_redir = NAT_MAPBLK; }
791 nat->in_flags |= IPN_NOTDST;
798 nat->in_flags |= IPN_NOTDST;
813 nat->in_flags |= IPN_NOTSRC;
820 nat->in_flags |= IPN_NOTSRC;
825 from: IPNY_FROM { nat->in_flags |= IPN_FILTER;
838 ifname: YY_STR { setifname(&nat, 0, $1);
843 family: | IPNY_INET { nat->in_v[0] = 4; nat->in_v[1] = 4; }
844 | IPNY_INET6 { nat->in_v[0] = 6; nat->in_v[1] = 6; }
848 YY_STR { setifname(&nat, 1, $1);
855 { nat->in_spmin = $3.p1;
856 nat->in_spmax = $3.p2;
859 { nat->in_spmin = $2.p1;
860 nat->in_spmax = $2.p2;
863 { nat->in_flags |= IPN_AUTOPORTMAP;
864 nat->in_spmin = 1024;
865 nat->in_spmax = 65535;
878 nat->in_pr[0] = IPPROTO_ICMPV6;
879 nat->in_pr[1] = IPPROTO_ICMPV6;
881 nat->in_pr[0] = IPPROTO_ICMP;
882 nat->in_pr[1] = IPPROTO_ICMP;
884 nat->in_flags = IPN_ICMPQUERY;
885 nat->in_spmin = $3.p1;
886 nat->in_spmax = $3.p2;
892 | saddr port portstuff { nat->in_osport = $3.p1;
893 nat->in_stop = $3.p2;
894 nat->in_scmp = $3.pc;
899 saddr: addr { nat->in_osrcatype = $1.t;
901 &nat->in_osrc.na_addr[0],
904 &nat->in_osrc.na_addr[1],
912 | daddr port portstuff { nat->in_odport = $3.p1;
913 nat->in_dtop = $3.p2;
914 nat->in_dcmp = $3.pc;
919 daddr: addr { nat->in_odstatype = $1.t;
921 &nat->in_odst.na_addr[0],
924 &nat->in_odst.na_addr[1],
1019 $$.a.iplookupname = addname(&nat,$3);
1031 $$.a.iplookupname = addname(&nat,$3);
1044 pool: IPNY_POOL { if (!(nat->in_flags & IPN_FILTER)) {
1052 hash: IPNY_HASH { if (!(nat->in_flags & IPN_FILTER)) {
1073 nattag: | IPNY_TAG YY_STR { strncpy(nat->in_tag.ipt_tag, $2,
1074 sizeof(nat->in_tag.ipt_tag));
1076 rr: | IPNY_ROUNDROBIN { nat->in_flags |= IPN_ROUNDR; }
1079 frag: | IPNY_FRAG { nat->in_flags |= IPN_FRAG; }
1082 age: | IPNY_AGE YY_NUMBER { nat->in_age[0] = $2;
1083 nat->in_age[1] = $2; }
1084 | IPNY_AGE YY_NUMBER '/' YY_NUMBER { nat->in_age[0] = $2;
1085 nat->in_age[1] = $4; }
1088 sticky: | IPNY_STICKY { if (!(nat->in_flags & IPN_ROUNDR) &&
1089 !(nat->in_flags & IPN_SPLIT)) {
1093 nat->in_flags |= IPN_STICKY;
1098 | IPNY_MSSCLAMP YY_NUMBER { nat->in_mssclamp = $2; }
1103 | IPNY_TCPUDP { nat->in_flags |= IPN_TCPUDP;
1104 nat->in_pr[0] = 0;
1105 nat->in_pr[1] = 0;
1107 | IPNY_TCP '/' IPNY_UDP { nat->in_flags |= IPN_TCPUDP;
1108 nat->in_pr[0] = 0;
1109 nat->in_pr[1] = 0;
1114 | IPNY_SEQUENTIAL { nat->in_flags |= IPN_SEQUENTIAL; }
1118 | IPNY_PURGE { nat->in_flags |= IPN_PURGE; }
1124 pos = addname(&nat, $2);
1125 nat->in_plabel = pos;
1126 nat->in_odport = nat->in_dpnext;
1127 nat->in_dtop = nat->in_odport;
1130 | proxy { if (nat->in_plabel != -1) {
1131 nat->in_ndport = nat->in_odport;
1132 nat->in_dpmin = nat->in_odport;
1133 nat->in_dpmax = nat->in_dpmin;
1134 nat->in_dtop = nat->in_dpmin;
1135 nat->in_dpnext = nat->in_dpmin;
1141 | IPNY_PURGE { nat->in_flags |= IPN_PURGE; }
1170 if (nat->in_v[0] == 6)
1396 if (nat == NULL) {
1397 nattop = nat = n;
1400 nat->in_next = n;
1401 n->in_pnext = &nat->in_next;
1402 nat = n;
1420 nat->in_pr[0] = p;
1421 nat->in_pr[1] = p;
1426 nat->in_flags |= IPN_TCP;
1427 nat->in_flags &= ~IPN_UDP;
1430 nat->in_flags |= IPN_UDP;
1431 nat->in_flags &= ~IPN_TCP;
1437 nat->in_flags &= ~IPN_TCPUDP;
1438 if (!(nat->in_flags & IPN_ICMPQUERY) &&
1439 !(nat->in_redir & NAT_DIVERTUDP)) {
1440 nat->in_dcmp = 0;
1441 nat->in_scmp = 0;
1442 nat->in_dpmin = 0;
1443 nat->in_dpmax = 0;
1444 nat->in_dpnext = 0;
1445 nat->in_spmin = 0;
1446 nat->in_spmax = 0;
1447 nat->in_spnext = 0;
1451 if ((nat->in_redir & NAT_MAPBLK) == 0) {
1452 nat->in_flags &= ~IPN_TCPUDP;
1453 nat->in_dcmp = 0;
1454 nat->in_scmp = 0;
1455 nat->in_dpmin = 0;
1456 nat->in_dpmax = 0;
1457 nat->in_dpnext = 0;
1458 nat->in_spmin = 0;
1459 nat->in_spmax = 0;
1460 nat->in_spnext = 0;
1465 if ((nat->in_flags & (IPN_TCP|IPN_UDP)) == 0) {
1466 nat->in_stop = 0;
1467 nat->in_dtop = 0;
1468 nat->in_osport = 0;
1469 nat->in_odport = 0;
1470 nat->in_stop = 0;
1471 nat->in_osport = 0;
1472 nat->in_dtop = 0;
1473 nat->in_odport = 0;
1475 if ((nat->in_flags & (IPN_TCPUDP|IPN_FIXEDDPORT)) == IPN_FIXEDDPORT)
1476 nat->in_flags &= ~IPN_FIXEDDPORT;
1522 sprintf(msg, "%d:ioctl(zero nat rule)",
1542 sprintf(msg, "%d:ioctl(delete nat rule)",
1552 sprintf(msg, "%d:ioctl(add/insert nat rule)",
1569 if (nat->in_ifnames[1] == -1)
1570 nat->in_ifnames[1] = nat->in_ifnames[0];
1572 if ((suggest_port == 1) && (nat->in_flags & IPN_TCPUDP) == 0)
1573 nat->in_flags |= IPN_TCPUDP;
1575 if ((nat->in_flags & IPN_TCPUDP) == 0)
1576 setnatproto(nat->in_pr[1]);
1578 if (((nat->in_redir & NAT_MAPBLK) != 0) ||
1579 ((nat->in_flags & IPN_AUTOPORTMAP) != 0))
1580 nat_setgroupmap(nat);
1587 if ((suggest_port == 1) && (nat->in_flags & IPN_TCPUDP) == 0)
1588 nat->in_flags |= IPN_TCPUDP;
1590 if ((nat->in_pr[0] == 0) && ((nat->in_flags & IPN_TCPUDP) == 0) &&
1591 (nat->in_dpmin != 0 || nat->in_dpmax != 0 || nat->in_dpnext != 0))
1594 if (nat->in_ifnames[1] == -1)
1595 nat->in_ifnames[1] = nat->in_ifnames[0];