#ifndef __STC_HELPER_IPTABLES_H__
#define __STC_HELPER_IPTABLES_H__
+#include <arpa/inet.h>
#include "stc-manager.h"
#include "stc-error.h"
-#define STC_IN_CHAIN "STC_IN"
-#define STC_OUT_CHAIN "STC_OUT"
+#define STC_IN_CHAIN "STC_IN"
+#define STC_OUT_CHAIN "STC_OUT"
#define STC_FRWD_CHAIN "STC_FRWD"
+#define STC_TETHER_CHAIN "STC_TETHER"
+
+#define STC_IN_DROP_CHAIN "STC_IN_DROP"
+#define STC_IN_FG_CHAIN "STC_IN_FG"
+#define STC_IN_ACCEPT_CHAIN "STC_IN_ACCEPT"
+#define STC_IN_BG_DROP_CHAIN "STC_IN_BG_DROP"
+#define STC_IN_BG_CHAIN "STC_IN_BG"
+
+#define STC_OUT_DROP_CHAIN "STC_OUT_DROP"
+#define STC_OUT_FG_CHAIN "STC_OUT_FG"
+#define STC_OUT_ACCEPT_CHAIN "STC_OUT_ACCEPT"
+#define STC_OUT_BG_DROP_CHAIN "STC_OUT_BG_DROP"
+#define STC_OUT_BG_CHAIN "STC_OUT_BG"
typedef enum {
IPTABLES_DIRECTION_NONE,
IP_TYPE_LAST_ELEM
} iptables_ip_type_e;
+typedef enum {
+ IPTABLES_IP_NONE,
+ IPTABLES_IP_SINGLE,
+ IPTABLES_IP_MASK,
+ IPTABLES_IP_RANGE
+} iptables_iprange_type_e;
+
typedef struct {
char *chain;
char *ifname;
char *nfacct_name;
char *target;
+ iptables_iprange_type_e s_iprange_type;
+ iptables_iprange_type_e d_iprange_type;
+ struct in_addr s_ip1;
+ struct in_addr s_ip2;
+ struct in_addr d_ip1;
+ struct in_addr d_ip2;
iptables_rule_direction_e direction;
uint32_t classid;
} iptables_rule_s;
stc_error_e iptables_add(iptables_rule_s *rule, iptables_ip_type_e iptype);
stc_error_e iptables_remove(iptables_rule_s *rule, iptables_ip_type_e iptype);
+stc_error_e iptables_add_list(GSList *iptables_list, iptables_ip_type_e iptype);
+stc_error_e iptables_remove_list(GSList *iptables_list, iptables_ip_type_e iptype);
stc_error_e iptables_flush_chains(void);
stc_error_e iptables_init(void);
stc_error_e iptables_deinit(void);