+
+ if( (proto != NULL) && (proto->type == FWD_PR_TCPUDP) )
+ {
+ if( !(dtn2 = fwd_alloc_ptr(struct fwd_data)) ||
+ !(dtn2->section.rule.proto = fwd_alloc_ptr(struct fwd_proto))
+ ) {
+ fwd_free_ptr(dtn2);
+ fwd_read_error("out of memory while parsing config!");
+ }
+
+ dtn->section.rule.proto->type = FWD_PR_UDP;
+ dtn2->section.rule.proto->type = FWD_PR_TCP;
+
+ dtn2->section.rule.src = zsrc;
+ dtn2->section.rule.src_ip = src_ip;
+ dtn2->section.rule.src_mac = src_mac;
+ dtn2->section.rule.src_port = src_port;
+ dtn2->section.rule.dest = zdest;
+ dtn2->section.rule.dest_ip = dest_ip;
+ dtn2->section.rule.dest_port = dest_port;
+ dtn2->section.rule.target = dtn->section.rule.target;
+
+ dtn2->type = FWD_S_RULE;
+ dtn2->next = cv->cursor;
+ cv->cursor = dtn2;
+ }