/* update the port mapping decription and timestamp */ int update_portmapping_desc_timestamp(const char * ifname, unsigned short eport, int proto, const char * desc, unsigned int timestamp) { unsigned short iport; in_addr_t iaddr; char iaddr_str[16]; char rhost[32]; int r; r = priv_delete_redirect_rule_check_desc(ifname, eport, proto, &iport, &iaddr, rhost, sizeof(rhost), 1, desc); if(r < 0) return -1; if(r == 1) { /* only change timestamp */ remove_timestamp_entry(eport, proto); add_timestamp_entry(eport, proto, timestamp); return 0; } if (priv_delete_filter_rule(ifname, iport, proto, iaddr) < 0) return -1; inet_ntop(AF_INET, &iaddr, iaddr_str, sizeof(iaddr_str)); if(add_redirect_rule2(ifname, rhost, eport, iaddr_str, iport, proto, desc, timestamp) < 0) return -1; if(add_filter_rule2(ifname, rhost, iaddr_str, eport, iport, proto, desc) < 0) return -1; return 0; }
/* update the port mapping internal port, decription and timestamp */ int update_portmapping(const char * ifname, unsigned short eport, int proto, unsigned short iport, const char * desc, unsigned int timestamp) { unsigned short old_iport; in_addr_t iaddr; char iaddr_str[16]; char rhost[32]; if(priv_delete_redirect_rule(ifname, eport, proto, &old_iport, &iaddr, rhost, sizeof(rhost)) < 0) return -1; if (priv_delete_filter_rule(ifname, old_iport, proto, iaddr) < 0) return -1; inet_ntop(AF_INET, &iaddr, iaddr_str, sizeof(iaddr_str)); if(add_redirect_rule2(ifname, rhost, eport, iaddr_str, iport, proto, desc, timestamp) < 0) return -1; if(add_filter_rule2(ifname, rhost, iaddr_str, eport, iport, proto, desc) < 0) return -1; return 0; }
int delete_redirect_and_filter_rules(const char * ifname, unsigned short eport, int proto) { int r; unsigned short iport; in_addr_t iaddr; r = priv_delete_redirect_rule(ifname, eport, proto, &iport, &iaddr); if(r == 0) { r = priv_delete_filter_rule(ifname, iport, proto, iaddr); } return r; }