[STC Manager] Added logic to add and remove iptable rule of restriction. 62/134362/1
authorNishant Chaprana <n.chaprana@samsung.com>
Fri, 16 Jun 2017 06:30:46 +0000 (12:00 +0530)
committerNishant Chaprana <n.chaprana@samsung.com>
Fri, 16 Jun 2017 06:30:46 +0000 (12:00 +0530)
Description: This patch adds logic to add and remove iptable rule of
applied restriction, when application starts and exit respectively.

Change-Id: I873183cbd94c94b4d4fc8987cdcea66d82aaa7e9
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
packaging/stc-manager.spec
src/monitor/stc-monitor.c

index 3afe575..6eb4d90 100644 (file)
@@ -1,6 +1,6 @@
 Name:       stc-manager
 Summary:    STC(Smart Traffic Control) manager
-Version:    0.0.15
+Version:    0.0.16
 Release:    0
 Group:      Network & Connectivity/Other
 License:    Apache-2.0
index 896e437..32d2a8a 100755 (executable)
@@ -402,6 +402,32 @@ static void __process_restriction(enum traffic_restriction_type rst_type,
 
        switch (rst_type) {
        case RST_SET:
+               if (effective_data_limit <= 0) {
+                       char *default_ifname = stc_default_connection_get_ifname();
+                       struct nfacct_rule counter;
+                       stc_s *stc = stc_get_manager();
+
+                       if (!stc->carg) {
+                               stc->carg = MALLOC0(counter_arg_s, 1);
+                               stc->carg->sock =
+                                       stc_monitor_get_counter_socket();
+                       }
+
+                       counter.carg = stc->carg;
+                       counter.classid = rstn_value->classid;
+                       counter.intend = NFACCT_BLOCK;
+                       counter.iftype = STC_IFACE_UNKNOWN;
+                       g_strlcpy(counter.ifname, default_ifname,
+                                 MAX_IFACE_LENGTH);
+
+                       generate_counter_name(&counter);
+                       g_free(default_ifname);
+
+                       /* iptables rule */
+                       __add_iptables_in(&counter);
+                       __add_iptables_out(&counter);
+               }
+
                rstn_value->rst_state = STC_RESTRICTION_ACTIVATED;
                rstn_value->data_limit_reached = FALSE;
                break;
@@ -409,8 +435,34 @@ static void __process_restriction(enum traffic_restriction_type rst_type,
                ;//Do Nothing
                break;
        case RST_UNSET:
-               rstn_value->rst_state = STC_RESTRICTION_REMOVED;
-               rstn_value->data_limit_reached = FALSE;
+               {
+                       char *default_ifname = stc_default_connection_get_ifname();
+                       struct nfacct_rule counter;
+                       stc_s *stc = stc_get_manager();
+
+                       if (!stc->carg) {
+                               stc->carg = MALLOC0(counter_arg_s, 1);
+                               stc->carg->sock =
+                                       stc_monitor_get_counter_socket();
+                       }
+
+                       counter.carg = stc->carg;
+                       counter.classid = rstn_value->classid;
+                       counter.intend = NFACCT_BLOCK;
+                       counter.iftype = STC_IFACE_UNKNOWN;
+                       g_strlcpy(counter.ifname, default_ifname,
+                                 MAX_IFACE_LENGTH);
+
+                       generate_counter_name(&counter);
+                       g_free(default_ifname);
+
+                       /* iptables rule */
+                       __del_iptables_in(&counter);
+                       __del_iptables_out(&counter);
+
+                       rstn_value->rst_state = STC_RESTRICTION_REMOVED;
+                       rstn_value->data_limit_reached = FALSE;
+               }
                break;
        default:
                ;//Do Nothing