2 * Smart Traffic Control (STC)
4 * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
21 * This file implements Smart Traffic Control (STC) user library.
23 * @file stc-firewall.c
24 * @author Tak hyunuk (hyunuk.tak@samsung.com)
28 /*****************************************************************************
30 *****************************************************************************/
34 /*****************************************************************************
36 *****************************************************************************/
38 /*****************************************************************************
39 * Smart Traffic Control (STC) library headers
40 *****************************************************************************/
43 #include "stc-private.h"
48 #include "stc-event.h"
51 #include "stc-firewall.h"
53 /*****************************************************************************
55 *****************************************************************************/
57 /*****************************************************************************
59 *****************************************************************************/
61 static GSList *g_fw_chain_list = NULL;
62 static GSList *g_fw_rule_list = NULL;
64 /*****************************************************************************
65 * Local Functions Definition
66 *****************************************************************************/
69 static void __stc_fw_init_chain(void *data, const char *name)
71 stc_fw_chain_s *chain = (stc_fw_chain_s *)data;
73 memset(chain, 0, sizeof(stc_fw_chain_s));
74 chain->chain = g_strdup(name);
75 chain->created = true;
78 static void __stc_fw_set_chain(void *data,
79 stc_firewall_chain_target_e target)
81 stc_fw_chain_s *chain = (stc_fw_chain_s *)data;
82 chain->target = target;
85 static void __stc_fw_clone_chain(void *a, void *b)
87 stc_fw_chain_s *origin = (stc_fw_chain_s *)a;
88 stc_fw_chain_s *cloned = (stc_fw_chain_s *)b;
90 cloned->chain = g_strdup(origin->chain);
91 cloned->priority = origin->priority;
92 cloned->target = origin->target;
93 cloned->created = origin->created;
96 static void __stc_fw_deinit_chain(void *data)
98 stc_fw_chain_s *chain = (stc_fw_chain_s *)data;
104 static void __stc_fw_init_rule(void *data)
106 stc_fw_rule_s *rule = (stc_fw_rule_s *)data;
108 memset(rule, 0, sizeof(stc_fw_rule_s));
111 static void __stc_fw_clone_rule(void *a, void *b)
113 stc_fw_rule_s *origin = (stc_fw_rule_s *)a;
114 stc_fw_rule_s *cloned = (stc_fw_rule_s *)b;
117 cloned->chain = g_strdup(origin->chain);
118 cloned->direction = origin->direction;
119 cloned->s_ip_type = origin->s_ip_type;
120 cloned->d_ip_type = origin->d_ip_type;
121 cloned->s_port_type = origin->s_port_type;
122 cloned->d_port_type = origin->d_port_type;
123 cloned->protocol = origin->protocol;
124 cloned->family = origin->family;
129 cloned->s_ip1 = g_strdup(origin->s_ip1);
130 cloned->s_ip2 = g_strdup(origin->s_ip2);
131 cloned->d_ip1 = g_strdup(origin->d_ip1);
132 cloned->d_ip2 = g_strdup(origin->d_ip2);
133 cloned->s_port1 = origin->s_port1;
134 cloned->s_port2 = origin->s_port2;
135 cloned->d_port1 = origin->d_port1;
136 cloned->d_port2 = origin->d_port2;
137 FREE(cloned->ifname);
138 cloned->ifname = g_strdup(origin->ifname);
139 cloned->target = origin->target;
140 cloned->log_level = origin->log_level;
141 FREE(cloned->log_prefix);
142 cloned->log_prefix = g_strdup(origin->log_prefix);
143 cloned->nflog_group = origin->nflog_group;
144 FREE(cloned->nflog_prefix);
145 cloned->nflog_prefix = g_strdup(origin->nflog_prefix);
146 cloned->nflog_range = origin->nflog_range;
147 cloned->nflog_threshold = origin->nflog_threshold;
148 FREE(cloned->identifier);
149 cloned->identifier = g_strdup(origin->identifier);
150 cloned->key = origin->key;
153 static void __stc_fw_deinit_rule(void *data)
155 stc_fw_rule_s *rule = (stc_fw_rule_s *)data;
163 FREE(rule->log_prefix);
164 FREE(rule->nflog_prefix);
165 FREE(rule->identifier);
170 static void __stc_fw_add_to_chain_list(stc_firewall_chain_h chain_h)
172 g_fw_chain_list = g_slist_append(g_fw_chain_list, chain_h);
175 static bool __stc_fw_check_chain_validity(stc_firewall_chain_h chain_h)
180 if (g_slist_find(g_fw_chain_list, chain_h))
186 static bool __stc_fw_check_chain_created(stc_firewall_chain_h chain_h)
188 stc_fw_chain_s *chain = (stc_fw_chain_s *)chain_h;
190 return chain->created;
193 static void __stc_fw_remove_from_chain_list(stc_firewall_chain_h chain_h)
195 g_fw_chain_list = g_slist_remove(g_fw_chain_list, chain_h);
198 static void __stc_fw_add_to_rule_list(stc_firewall_rule_h rule_h)
200 g_fw_rule_list = g_slist_append(g_fw_rule_list, rule_h);
203 static bool __stc_fw_check_rule_validity(stc_firewall_rule_h rule_h)
208 if (g_slist_find(g_fw_rule_list, rule_h))
214 static bool __stc_fw_check_rule_created(stc_firewall_rule_h rule_h)
216 stc_fw_rule_s *rule = (stc_fw_rule_s *)rule_h;
224 static void __stc_fw_remove_from_rule_list(stc_firewall_rule_h rule_h)
226 g_fw_rule_list = g_slist_remove(g_fw_rule_list, rule_h);
229 static void __stc_fw_make_rule_params(
230 stc_fw_rule_s *rule, GVariant **params)
232 GVariantBuilder *builder;
234 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
236 g_variant_builder_add(builder, "{sv}",
238 g_variant_new_string(rule->chain));
240 if (rule->direction != STC_FIREWALL_DIRECTION_NONE)
241 g_variant_builder_add(builder, "{sv}",
242 STC_FW_RULE_DIRECTION,
243 g_variant_new_uint16(rule->direction));
245 if (rule->s_ip_type != STC_FIREWALL_IP_NONE)
246 g_variant_builder_add(builder, "{sv}",
248 g_variant_new_uint16(rule->s_ip_type));
250 if (rule->d_ip_type != STC_FIREWALL_IP_NONE)
251 g_variant_builder_add(builder, "{sv}",
253 g_variant_new_uint16(rule->d_ip_type));
255 if (rule->s_port_type != STC_FIREWALL_PORT_NONE)
256 g_variant_builder_add(builder, "{sv}",
257 STC_FW_RULE_SPORTTYPE,
258 g_variant_new_uint16(rule->s_port_type));
260 if (rule->d_port_type != STC_FIREWALL_PORT_NONE)
261 g_variant_builder_add(builder, "{sv}",
262 STC_FW_RULE_DPORTTYPE,
263 g_variant_new_uint16(rule->d_port_type));
265 if (rule->protocol != STC_FIREWALL_PROTOCOL_NONE)
266 g_variant_builder_add(builder, "{sv}",
267 STC_FW_RULE_PROTOCOL,
268 g_variant_new_uint16(rule->protocol));
270 if (rule->family != STC_FIREWALL_FAMILY_NONE)
271 g_variant_builder_add(builder, "{sv}",
273 g_variant_new_uint16(rule->family));
276 g_variant_builder_add(builder, "{sv}",
278 g_variant_new_string(rule->s_ip1));
281 g_variant_builder_add(builder, "{sv}",
283 g_variant_new_string(rule->s_ip2));
286 g_variant_builder_add(builder, "{sv}",
288 g_variant_new_string(rule->d_ip1));
291 g_variant_builder_add(builder, "{sv}",
293 g_variant_new_string(rule->d_ip2));
296 g_variant_builder_add(builder, "{sv}",
298 g_variant_new_uint32(rule->s_port1));
301 g_variant_builder_add(builder, "{sv}",
303 g_variant_new_uint32(rule->s_port2));
306 g_variant_builder_add(builder, "{sv}",
308 g_variant_new_uint32(rule->d_port1));
311 g_variant_builder_add(builder, "{sv}",
313 g_variant_new_uint32(rule->d_port2));
316 g_variant_builder_add(builder, "{sv}",
318 g_variant_new_string(rule->ifname));
321 g_variant_builder_add(builder, "{sv}",
323 g_variant_new_uint16(rule->target));
326 g_variant_builder_add(builder, "{sv}",
327 STC_FW_RULE_LOG_LEVEL,
328 g_variant_new_uint16(rule->log_level));
330 if (rule->log_prefix)
331 g_variant_builder_add(builder, "{sv}",
332 STC_FW_RULE_LOG_PREFIX,
333 g_variant_new_string(rule->log_prefix));
335 if (rule->nflog_group)
336 g_variant_builder_add(builder, "{sv}",
337 STC_FW_RULE_NFLOG_GROUP,
338 g_variant_new_uint16(rule->nflog_group));
340 if (rule->nflog_prefix)
341 g_variant_builder_add(builder, "{sv}",
342 STC_FW_RULE_NFLOG_PREFIX,
343 g_variant_new_string(rule->nflog_prefix));
345 if (rule->nflog_range)
346 g_variant_builder_add(builder, "{sv}",
347 STC_FW_RULE_NFLOG_RANGE,
348 g_variant_new_uint16(rule->nflog_range));
350 if (rule->nflog_threshold)
351 g_variant_builder_add(builder, "{sv}",
352 STC_FW_RULE_NFLOG_THRESHOLD,
353 g_variant_new_uint16(rule->nflog_threshold));
355 if (rule->identifier)
356 g_variant_builder_add(builder, "{sv}",
357 STC_FW_RULE_IDENTIFIER,
358 g_variant_new_string(rule->identifier));
361 g_variant_builder_add(builder, "{sv}",
363 g_variant_new_uint32(rule->key));
365 *params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
366 g_variant_builder_unref(builder);
369 static void __stc_fw_extract_chain(const char *key,
370 GVariant *value, void *user_data)
372 stc_fw_chain_s *chain = (stc_fw_chain_s *)user_data;
377 if (!g_strcmp0(key, STC_FW_CHAIN_NAME)) {
379 const gchar *str = g_variant_get_string(value, &str_length);
380 chain->chain = g_strdup(str);
382 } else if (!g_strcmp0(key, STC_FW_CHAIN_PRIORITY)) {
383 chain->priority = g_variant_get_uint32(value);
385 } else if (!g_strcmp0(key, STC_FW_CHAIN_TARGET)) {
386 chain->target = g_variant_get_uint16(value);
392 static void __stc_fw_extract_rule(const char *key,
393 GVariant *value, void *user_data)
395 stc_fw_rule_s *rule = (stc_fw_rule_s *)user_data;
400 if (!g_strcmp0(key, STC_FW_RULE_CHAIN)) {
402 const gchar *str = g_variant_get_string(value, &str_length);
403 rule->chain = g_strdup(str);
405 } else if (!g_strcmp0(key, STC_FW_RULE_DIRECTION)) {
406 rule->direction = g_variant_get_uint16(value);
408 } else if (!g_strcmp0(key, STC_FW_RULE_SIPTYPE)) {
409 rule->s_ip_type = g_variant_get_uint16(value);
411 } else if (!g_strcmp0(key, STC_FW_RULE_DIPTYPE)) {
412 rule->d_ip_type = g_variant_get_uint16(value);
414 } else if (!g_strcmp0(key, STC_FW_RULE_SPORTTYPE)) {
415 rule->s_port_type = g_variant_get_uint16(value);
417 } else if (!g_strcmp0(key, STC_FW_RULE_DPORTTYPE)) {
418 rule->d_port_type = g_variant_get_uint16(value);
420 } else if (!g_strcmp0(key, STC_FW_RULE_PROTOCOL)) {
421 rule->protocol = g_variant_get_uint16(value);
423 } else if (!g_strcmp0(key, STC_FW_RULE_FAMILY)) {
424 rule->family = g_variant_get_uint16(value);
426 } else if (!g_strcmp0(key, STC_FW_RULE_SIP1)) {
428 const gchar *str = g_variant_get_string(value, &str_length);
429 rule->s_ip1 = g_strdup(str);
431 } else if (!g_strcmp0(key, STC_FW_RULE_SIP2)) {
433 const gchar *str = g_variant_get_string(value, &str_length);
434 rule->s_ip2 = g_strdup(str);
436 } else if (!g_strcmp0(key, STC_FW_RULE_DIP1)) {
438 const gchar *str = g_variant_get_string(value, &str_length);
439 rule->d_ip1 = g_strdup(str);
441 } else if (!g_strcmp0(key, STC_FW_RULE_DIP2)) {
443 const gchar *str = g_variant_get_string(value, &str_length);
444 rule->d_ip2 = g_strdup(str);
446 } else if (!g_strcmp0(key, STC_FW_RULE_SPORT1)) {
447 rule->s_port1 = g_variant_get_uint32(value);
449 } else if (!g_strcmp0(key, STC_FW_RULE_SPORT2)) {
450 rule->s_port2 = g_variant_get_uint32(value);
452 } else if (!g_strcmp0(key, STC_FW_RULE_DPORT1)) {
453 rule->d_port1 = g_variant_get_uint32(value);
455 } else if (!g_strcmp0(key, STC_FW_RULE_DPORT2)) {
456 rule->d_port2 = g_variant_get_uint32(value);
458 } else if (!g_strcmp0(key, STC_FW_RULE_IFNAME)) {
460 const gchar *str = g_variant_get_string(value, &str_length);
461 rule->ifname = g_strdup(str);
463 } else if (!g_strcmp0(key, STC_FW_RULE_TARGET)) {
464 rule->target = g_variant_get_uint16(value);
466 } else if (!g_strcmp0(key, STC_FW_RULE_LOG_LEVEL)) {
467 rule->log_level = g_variant_get_uint16(value);
469 } else if (!g_strcmp0(key, STC_FW_RULE_LOG_PREFIX)) {
471 const gchar *str = g_variant_get_string(value, &str_length);
472 rule->log_prefix = g_strdup(str);
474 } else if (!g_strcmp0(key, STC_FW_RULE_NFLOG_GROUP)) {
475 rule->nflog_group = g_variant_get_uint16(value);
477 } else if (!g_strcmp0(key, STC_FW_RULE_NFLOG_PREFIX)) {
479 const gchar *str = g_variant_get_string(value, &str_length);
480 rule->nflog_prefix = g_strdup(str);
482 } else if (!g_strcmp0(key, STC_FW_RULE_NFLOG_RANGE)) {
483 rule->nflog_range = g_variant_get_uint16(value);
485 } else if (!g_strcmp0(key, STC_FW_RULE_NFLOG_THRESHOLD)) {
486 rule->nflog_threshold = g_variant_get_uint16(value);
488 } else if (!g_strcmp0(key, STC_FW_RULE_IDENTIFIER)) {
490 const gchar *str = g_variant_get_string(value, &str_length);
491 rule->identifier = g_strdup(str);
493 } else if (!g_strcmp0(key, STC_FW_RULE_KEY)) {
494 rule->key = g_variant_get_uint32(value);
500 static void __stc_fw_print_chain(stc_fw_chain_s *chain)
505 STC_LOGD(STC_HR_SINGLE);
507 STC_LOGD("[%s][%s][%u]", (chain->chain) ? chain->chain : "",
508 _stc_convert_fw_chain_target_to_string(chain->target),
511 STC_LOGD(STC_HR_SINGLE);
514 static void __stc_fw_print_rule(stc_fw_rule_s *rule)
519 STC_LOGD(STC_HR_SINGLE);
521 STC_LOGD("[%s][%s][%s][%s][%s][%s][%s][%s][%s][%s]",
522 (rule->chain) ? rule->chain : "",
523 _stc_convert_fw_direction_to_string(rule->direction),
524 (rule->ifname) ? rule->ifname : "",
525 _stc_convert_fw_family_type_to_string(rule->family),
526 _stc_convert_fw_ip_type_to_string(rule->s_ip_type),
527 (rule->s_ip1) ? rule->s_ip1 : "",
528 (rule->s_ip2) ? rule->s_ip2 : "",
529 _stc_convert_fw_ip_type_to_string(rule->d_ip_type),
530 (rule->d_ip1) ? rule->d_ip1 : "",
531 (rule->d_ip2) ? rule->d_ip2 : "");
533 STC_LOGD("[%s][%s][%d][%d][%s][%d][%d][%s][%d][%s][%d][%s][%d][%d]",
534 _stc_convert_fw_protocol_type_to_string(rule->protocol),
535 _stc_convert_fw_port_type_to_string(rule->s_port_type),
538 _stc_convert_fw_port_type_to_string(rule->d_port_type),
541 _stc_convert_fw_rule_target_to_string(rule->target),
547 rule->nflog_threshold);
549 STC_LOGD(STC_HR_SINGLE);
552 stc_error_e _stc_fw_lock(void)
554 GVariant *message = NULL;
555 stc_error_e error = STC_ERROR_NONE;
558 message = _stc_dbus_invoke_method(
561 STC_MANAGER_FW_INTERFACE,
562 STC_MANAGER_FW_METHOD_LOCK,
566 STC_RETURN_VAL_IF(message == NULL,
567 error, "Failed to invoke dbus method");
569 g_variant_get(message, "(i)", &result);
570 STC_LOGI("Successfully lock firewall [%d]", result);
571 g_variant_unref(message);
573 return STC_ERROR_NONE;
576 stc_error_e _stc_fw_unlock(void)
578 GVariant *message = NULL;
579 stc_error_e error = STC_ERROR_NONE;
582 message = _stc_dbus_invoke_method(
585 STC_MANAGER_FW_INTERFACE,
586 STC_MANAGER_FW_METHOD_UNLOCK,
590 STC_RETURN_VAL_IF(message == NULL,
591 error, "Failed to invoke dbus method");
593 g_variant_get(message, "(i)", &result);
594 STC_LOGI("Successfully lock firewall [%d]", result);
595 g_variant_unref(message);
597 return STC_ERROR_NONE;
600 stc_error_e _stc_fw_get_lock(stc_firewall_lock_e *state)
602 GVariant *message = NULL;
603 stc_error_e error = STC_ERROR_NONE;
606 message = _stc_dbus_invoke_method(
609 STC_MANAGER_FW_INTERFACE,
610 STC_MANAGER_FW_METHOD_GET_LOCK,
614 STC_RETURN_VAL_IF(message == NULL,
615 error, "Failed to invoke dbus method");
617 g_variant_get(message, "(i)", &result);
618 *state = (stc_firewall_lock_e)result;
620 STC_LOGI("Successfully get firewall lock state [%d]", result);
621 g_variant_unref(message);
623 return STC_ERROR_NONE;
627 stc_error_e _stc_fw_chain_add(stc_fw_chain_s *chain)
629 GVariant *message = NULL;
630 GVariant *params = NULL;
631 stc_error_e error = STC_ERROR_NONE;
634 params = g_variant_new("(s)", chain->chain);
636 message = _stc_dbus_invoke_method(
639 STC_MANAGER_FW_INTERFACE,
640 STC_MANAGER_FW_METHOD_ADD_CHAIN,
644 STC_RETURN_VAL_IF(message == NULL,
645 error, "Failed to invoke dbus method");
647 g_variant_get(message, "(i)", &result);
648 STC_LOGI("Successfully add firewall chain [%d]", result);
649 g_variant_unref(message);
651 return STC_ERROR_NONE;
654 stc_error_e _stc_fw_chain_remove(stc_fw_chain_s *chain)
656 GVariant *message = NULL;
657 GVariant *params = NULL;
658 stc_error_e error = STC_ERROR_NONE;
661 params = g_variant_new("(s)", chain->chain);
663 message = _stc_dbus_invoke_method(
666 STC_MANAGER_FW_INTERFACE,
667 STC_MANAGER_FW_METHOD_REMOVE_CHAIN,
671 STC_RETURN_VAL_IF(message == NULL,
672 error, "Failed to invoke dbus method");
674 g_variant_get(message, "(i)", &result);
675 STC_LOGI("Successfully remove firewall chain [%d]", result);
676 g_variant_unref(message);
678 return STC_ERROR_NONE;
681 stc_error_e _stc_fw_chain_flush(stc_fw_chain_s *chain)
683 GVariant *message = NULL;
684 GVariant *params = NULL;
685 stc_error_e error = STC_ERROR_NONE;
688 params = g_variant_new("(s)", chain->chain);
690 message = _stc_dbus_invoke_method(
693 STC_MANAGER_FW_INTERFACE,
694 STC_MANAGER_FW_METHOD_FLUSH_CHAIN,
698 STC_RETURN_VAL_IF(message == NULL,
699 error, "Failed to invoke dbus method");
701 g_variant_get(message, "(i)", &result);
702 STC_LOGI("Successfully flush firewall chain [%d]", result);
703 g_variant_unref(message);
705 return STC_ERROR_NONE;
708 stc_error_e _stc_fw_chain_foreach(stc_firewall_chain_info_cb callback,
711 GVariant *message = NULL;
712 stc_error_e error = STC_ERROR_NONE;
713 GVariantIter *iter = NULL;
714 GVariantIter *iter_row = NULL;
715 GSList *chain_list = NULL;
717 stc_callback_ret_e rv = STC_CALLBACK_CANCEL;
719 message = _stc_dbus_invoke_method(
722 STC_MANAGER_FW_INTERFACE,
723 STC_MANAGER_FW_METHOD_GET_ALL_CHAIN,
727 STC_RETURN_VAL_IF(message == NULL,
728 error, "Failed to invoke dbus method");
730 g_variant_get(message, "(aa{sv})", &iter);
732 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
733 stc_fw_chain_s *chain = MALLOC0(stc_fw_chain_s, 1);
736 chain->created = false;
738 _stc_dbus_dictionary_foreach(iter_row,
739 __stc_fw_extract_chain, chain);
741 __stc_fw_print_chain(chain);
743 chain_list = g_slist_append(chain_list, (stc_fw_chain_s *)chain);
745 g_variant_iter_free(iter_row);
748 g_variant_iter_free(iter);
749 g_variant_unref(message);
751 if ((int)g_slist_length(chain_list) == 0) {
752 STC_LOGD("There are no firewall chains");
753 return STC_ERROR_NONE;
756 for (list = chain_list; list; list = list->next) {
757 stc_fw_chain_s *chain = (stc_fw_chain_s *)list->data;
758 __stc_fw_add_to_chain_list((stc_firewall_chain_h)chain);
759 rv = callback((stc_firewall_chain_h)chain, user_data);
760 __stc_fw_remove_from_chain_list((stc_firewall_chain_h)chain);
765 g_slist_free_full(chain_list, __stc_fw_deinit_chain);
767 return STC_ERROR_NONE;
770 stc_error_e _stc_fw_chain_set(stc_fw_chain_s *chain)
772 GVariant *message = NULL;
773 GVariant *params = NULL;
774 stc_error_e error = STC_ERROR_NONE;
777 params = g_variant_new("(su)", chain->chain, chain->target);
779 message = _stc_dbus_invoke_method(
782 STC_MANAGER_FW_INTERFACE,
783 STC_MANAGER_FW_METHOD_SET_CHAIN,
787 STC_RETURN_VAL_IF(message == NULL,
788 error, "Failed to invoke dbus method");
790 g_variant_get(message, "(i)", &result);
791 STC_LOGI("Successfully set firewall chain [%d]", result);
792 g_variant_unref(message);
794 return STC_ERROR_NONE;
797 stc_error_e _stc_fw_chain_unset(stc_fw_chain_s *chain)
799 GVariant *message = NULL;
800 GVariant *params = NULL;
801 stc_error_e error = STC_ERROR_NONE;
804 params = g_variant_new("(s)", chain->chain);
806 message = _stc_dbus_invoke_method(
809 STC_MANAGER_FW_INTERFACE,
810 STC_MANAGER_FW_METHOD_UNSET_CHAIN,
814 STC_RETURN_VAL_IF(message == NULL,
815 error, "Failed to invoke dbus method");
817 g_variant_get(message, "(i)", &result);
818 STC_LOGI("Successfully unset firewall chain [%d]", result);
819 g_variant_unref(message);
821 return STC_ERROR_NONE;
824 stc_error_e _stc_fw_rule_add(stc_fw_rule_s *rule)
826 GVariant *message = NULL;
827 GVariant *params = NULL;
828 stc_error_e error = STC_ERROR_NONE;
831 __stc_fw_make_rule_params(rule, ¶ms);
833 message = _stc_dbus_invoke_method(
836 STC_MANAGER_FW_INTERFACE,
837 STC_MANAGER_FW_METHOD_ADD_RULE,
841 STC_RETURN_VAL_IF(message == NULL,
842 error, "Failed to invoke dbus method");
844 g_variant_get(message, "(i)", &result);
845 STC_LOGI("Successfully add firewall rule [%d]", result);
846 g_variant_unref(message);
848 return STC_ERROR_NONE;
851 stc_error_e _stc_fw_rule_remove(stc_fw_rule_s *rule)
853 GVariant *message = NULL;
854 GVariant *params = NULL;
855 stc_error_e error = STC_ERROR_NONE;
858 __stc_fw_make_rule_params(rule, ¶ms);
860 message = _stc_dbus_invoke_method(
863 STC_MANAGER_FW_INTERFACE,
864 STC_MANAGER_FW_METHOD_REMOVE_RULE,
868 STC_RETURN_VAL_IF(message == NULL,
869 error, "Failed to invoke dbus method");
871 g_variant_get(message, "(i)", &result);
872 STC_LOGI("Successfully remove firewall rule [%d]", result);
873 g_variant_unref(message);
875 return STC_ERROR_NONE;
878 stc_error_e _stc_fw_rule_update(stc_fw_rule_s *rule)
880 GVariant *message = NULL;
881 GVariant *params = NULL;
882 stc_error_e error = STC_ERROR_NONE;
885 __stc_fw_make_rule_params(rule, ¶ms);
887 message = _stc_dbus_invoke_method(
890 STC_MANAGER_FW_INTERFACE,
891 STC_MANAGER_FW_METHOD_UPDATE_RULE,
895 STC_RETURN_VAL_IF(message == NULL,
896 error, "Failed to invoke dbus method");
898 g_variant_get(message, "(i)", &result);
899 STC_LOGI("Successfully update firewall rule [%d]", result);
900 g_variant_unref(message);
902 return STC_ERROR_NONE;
905 stc_error_e _stc_fw_rule_foreach(stc_firewall_rule_info_cb callback,
908 GVariant *message = NULL;
909 stc_error_e error = STC_ERROR_NONE;
910 GVariantIter *iter = NULL;
911 GVariantIter *iter_row = NULL;
912 GSList *rule_list = NULL;
914 stc_callback_ret_e rv = STC_CALLBACK_CANCEL;
916 message = _stc_dbus_invoke_method(
919 STC_MANAGER_FW_INTERFACE,
920 STC_MANAGER_FW_METHOD_GET_ALL_RULE,
924 STC_RETURN_VAL_IF(message == NULL,
925 error, "Failed to invoke dbus method");
927 g_variant_get(message, "(aa{sv})", &iter);
929 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
930 stc_fw_rule_s *rule = MALLOC0(stc_fw_rule_s, 1);
932 _stc_dbus_dictionary_foreach(iter_row,
933 __stc_fw_extract_rule, rule);
935 __stc_fw_print_rule(rule);
937 rule_list = g_slist_append(rule_list, (stc_fw_rule_s *)rule);
939 g_variant_iter_free(iter_row);
942 g_variant_iter_free(iter);
943 g_variant_unref(message);
945 if ((int)g_slist_length(rule_list) == 0) {
946 STC_LOGD("There are no firewall rules");
947 return STC_ERROR_NONE;
950 for (list = rule_list; list; list = list->next) {
951 stc_fw_rule_s *rule = (stc_fw_rule_s *)list->data;
952 __stc_fw_add_to_rule_list((stc_firewall_rule_h)rule);
953 rv = callback((stc_firewall_rule_h)rule, user_data);
954 __stc_fw_remove_from_rule_list((stc_firewall_rule_h)rule);
959 g_slist_free_full(rule_list, __stc_fw_deinit_rule);
961 return STC_ERROR_NONE;
964 EXPORT_API int stc_firewall_lock(stc_h stc)
966 int ret = STC_ERROR_NONE;
968 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
970 if (!(_stc_handle_check_validity(stc))) {
971 STC_LOGE("Invalid parameter");
972 return STC_ERROR_INVALID_PARAMETER;
975 ret = _stc_fw_lock();
976 if (ret != STC_ERROR_NONE) {
977 STC_LOGE("Failed to lock firewall [%s]",
978 _stc_convert_error_type_to_string(ret));
982 STC_LOGI("Firewall successfully locked");
984 return STC_ERROR_NONE;
987 EXPORT_API int stc_firewall_unlock(stc_h stc)
989 int ret = STC_ERROR_NONE;
991 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
993 if (!(_stc_handle_check_validity(stc))) {
994 STC_LOGE("Invalid parameter");
995 return STC_ERROR_INVALID_PARAMETER;
998 ret = _stc_fw_unlock();
999 if (ret != STC_ERROR_NONE) {
1000 STC_LOGE("Failed to unlock firewall [%s]",
1001 _stc_convert_error_type_to_string(ret));
1005 STC_LOGI("Firewall successfully unlocked");
1007 return STC_ERROR_NONE;
1010 EXPORT_API int stc_firewall_get_lock(stc_h stc, stc_firewall_lock_e *state)
1012 int ret = STC_ERROR_NONE;
1014 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1016 if (!(_stc_handle_check_validity(stc))) {
1017 STC_LOGE("Invalid parameter");
1018 return STC_ERROR_INVALID_PARAMETER;
1021 ret = _stc_fw_get_lock(state);
1022 if (ret != STC_ERROR_NONE) {
1023 STC_LOGE("Failed to get firewall lock state [%s]",
1024 _stc_convert_error_type_to_string(ret));
1028 STC_LOGI("Firewall successfully get lock state");
1030 return STC_ERROR_NONE;
1033 EXPORT_API int stc_firewall_chain_create(stc_h stc, const char *name,
1034 stc_firewall_chain_h *chain_h)
1036 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1038 if (!(_stc_handle_check_validity(stc))) {
1039 STC_LOGE("Invalid parameter");
1040 return STC_ERROR_INVALID_PARAMETER;
1043 if (!chain_h || !name) {
1044 STC_LOGE("Invalid parameter");
1045 return STC_ERROR_INVALID_PARAMETER;
1048 stc_fw_chain_s *fw_chain = MALLOC0(stc_fw_chain_s, 1);
1050 STC_LOGE("Memory allocation failed");
1051 return STC_ERROR_OUT_OF_MEMORY;
1054 __stc_fw_init_chain(fw_chain, name);
1055 __stc_fw_add_to_chain_list((stc_firewall_chain_h)fw_chain);
1057 *chain_h = (stc_firewall_chain_h)fw_chain;
1059 STC_LOGI("Firewall chain successfully created");
1061 return STC_ERROR_NONE;
1064 EXPORT_API int stc_firewall_chain_clone(stc_firewall_chain_h origin_h,
1065 stc_firewall_chain_h *cloned_chain_h)
1067 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1069 if (__stc_fw_check_chain_validity(origin_h) == false ||
1070 cloned_chain_h == NULL) {
1071 STC_LOGE("Invalid parameter");
1072 return STC_ERROR_INVALID_PARAMETER;
1075 stc_fw_chain_s *fw_chain = MALLOC0(stc_fw_chain_s, 1);
1077 STC_LOGE("Memory allocation failed");
1078 return STC_ERROR_OUT_OF_MEMORY;
1081 __stc_fw_clone_chain(origin_h, fw_chain);
1082 __stc_fw_add_to_chain_list((stc_firewall_chain_h)fw_chain);
1084 *cloned_chain_h = (stc_firewall_chain_h)fw_chain;
1086 STC_LOGI("Firewall chain successfully cloned");
1088 return STC_ERROR_NONE;
1091 EXPORT_API int stc_firewall_chain_destroy(stc_firewall_chain_h chain_h)
1093 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1095 if (__stc_fw_check_chain_validity(chain_h) == false) {
1096 STC_LOGE("Invalid parameter");
1097 return STC_ERROR_INVALID_PARAMETER;
1100 __stc_fw_remove_from_chain_list(chain_h);
1101 __stc_fw_deinit_chain(chain_h);
1103 STC_LOGI("Firewall rule successfully destroyed");
1105 return STC_ERROR_NONE;
1108 EXPORT_API int stc_firewall_chain_get_name(stc_firewall_chain_h chain_h, char **name)
1110 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1112 if (__stc_fw_check_chain_validity(chain_h) == false) {
1113 STC_LOGE("Invalid parameter");
1114 return STC_ERROR_INVALID_PARAMETER;
1118 STC_LOGE("Invalid parameter");
1119 return STC_ERROR_INVALID_PARAMETER;
1122 stc_fw_chain_s *fw_chain = (stc_fw_chain_s *)chain_h;
1124 *name = g_strdup(fw_chain->chain);
1126 STC_LOGI("Chain [%s]", *name);
1128 return STC_ERROR_NONE;
1131 EXPORT_API int stc_firewall_chain_get_target(stc_firewall_chain_h chain_h,
1132 stc_firewall_chain_target_e *target)
1134 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1136 if (__stc_fw_check_chain_validity(chain_h) == false) {
1137 STC_LOGE("Invalid parameter");
1138 return STC_ERROR_INVALID_PARAMETER;
1142 STC_LOGE("Invalid parameter");
1143 return STC_ERROR_INVALID_PARAMETER;
1146 stc_fw_chain_s *fw_chain = (stc_fw_chain_s *)chain_h;
1148 *target = fw_chain->target;
1150 STC_LOGI("Target [%s]", _stc_convert_fw_chain_target_to_string(*target));
1152 return STC_ERROR_NONE;
1155 EXPORT_API int stc_firewall_chain_get_priority(stc_firewall_chain_h chain_h,
1156 unsigned int *priority)
1158 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1160 if (__stc_fw_check_chain_validity(chain_h) == false) {
1161 STC_LOGE("Invalid parameter");
1162 return STC_ERROR_INVALID_PARAMETER;
1166 STC_LOGE("Invalid parameter");
1167 return STC_ERROR_INVALID_PARAMETER;
1170 stc_fw_chain_s *fw_chain = (stc_fw_chain_s *)chain_h;
1172 *priority = fw_chain->priority;
1174 STC_LOGI("Priority [%u]", *priority);
1176 return STC_ERROR_NONE;
1179 EXPORT_API int stc_firewall_chain_add(stc_firewall_chain_h chain_h)
1181 int ret = STC_ERROR_NONE;
1183 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1185 if (__stc_fw_check_chain_validity(chain_h) == false) {
1186 STC_LOGE("Invalid parameter");
1187 return STC_ERROR_INVALID_PARAMETER;
1190 if (__stc_fw_check_chain_created(chain_h) == false) {
1191 STC_LOGE("Invalid parameter");
1192 return STC_ERROR_INVALID_PARAMETER;
1195 ret = _stc_fw_chain_add((stc_fw_chain_s *)chain_h);
1196 if (ret != STC_ERROR_NONE) {
1197 STC_LOGE("Failed to add firewall cahin [%s]",
1198 _stc_convert_error_type_to_string(ret));
1202 return STC_ERROR_NONE;
1205 EXPORT_API int stc_firewall_chain_remove(stc_firewall_chain_h chain_h)
1207 int ret = STC_ERROR_NONE;
1209 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1211 if (__stc_fw_check_chain_validity(chain_h) == false) {
1212 STC_LOGE("Invalid parameter");
1213 return STC_ERROR_INVALID_PARAMETER;
1216 if (__stc_fw_check_chain_created(chain_h) == true) {
1217 STC_LOGE("Invalid parameter");
1218 return STC_ERROR_INVALID_PARAMETER;
1221 ret = _stc_fw_chain_remove((stc_fw_chain_s *)chain_h);
1222 if (ret != STC_ERROR_NONE) {
1223 STC_LOGE("Failed to remove firewall cahin [%s]",
1224 _stc_convert_error_type_to_string(ret));
1228 return STC_ERROR_NONE;
1231 EXPORT_API int stc_firewall_chain_flush(stc_firewall_chain_h chain_h)
1233 int ret = STC_ERROR_NONE;
1235 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1237 if (__stc_fw_check_chain_validity(chain_h) == false) {
1238 STC_LOGE("Invalid parameter");
1239 return STC_ERROR_INVALID_PARAMETER;
1242 if (__stc_fw_check_chain_created(chain_h) == true) {
1243 STC_LOGE("Invalid parameter");
1244 return STC_ERROR_INVALID_PARAMETER;
1247 ret = _stc_fw_chain_flush((stc_fw_chain_s *)chain_h);
1248 if (ret != STC_ERROR_NONE) {
1249 STC_LOGE("Failed to flush firewall cahin [%s]",
1250 _stc_convert_error_type_to_string(ret));
1254 return STC_ERROR_NONE;
1257 EXPORT_API int stc_firewall_chain_foreach(stc_h stc,
1258 stc_firewall_chain_info_cb callback, void *user_data)
1260 int ret = STC_ERROR_NONE;
1262 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1264 if (!(_stc_handle_check_validity(stc))) {
1265 STC_LOGE("Invalid parameter");
1266 return STC_ERROR_INVALID_PARAMETER;
1269 if (callback == NULL) {
1270 STC_LOGE("Invalid parameter");
1271 return STC_ERROR_INVALID_PARAMETER;
1274 ret = _stc_fw_chain_foreach(callback, user_data);
1275 if (ret != STC_ERROR_NONE) {
1276 STC_LOGE("Failed to get all firewall chain [%s]",
1277 _stc_convert_error_type_to_string(ret));
1281 return STC_ERROR_NONE;
1284 EXPORT_API int stc_firewall_chain_set(stc_firewall_chain_h chain_h,
1285 stc_firewall_chain_target_e target)
1287 int ret = STC_ERROR_NONE;
1289 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1291 if (__stc_fw_check_chain_validity(chain_h) == false) {
1292 STC_LOGE("Invalid parameter");
1293 return STC_ERROR_INVALID_PARAMETER;
1296 if (__stc_fw_check_chain_created(chain_h) == true) {
1297 STC_LOGE("Invalid parameter");
1298 return STC_ERROR_INVALID_PARAMETER;
1301 __stc_fw_set_chain(chain_h, target);
1303 ret = _stc_fw_chain_set((stc_fw_chain_s *)chain_h);
1304 if (ret != STC_ERROR_NONE) {
1305 STC_LOGE("Failed to set firewall cahin [%s]",
1306 _stc_convert_error_type_to_string(ret));
1310 return STC_ERROR_NONE;
1313 EXPORT_API int stc_firewall_chain_unset(stc_firewall_chain_h chain_h)
1315 int ret = STC_ERROR_NONE;
1317 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1319 if (__stc_fw_check_chain_validity(chain_h) == false) {
1320 STC_LOGE("Invalid parameter");
1321 return STC_ERROR_INVALID_PARAMETER;
1324 if (__stc_fw_check_chain_created(chain_h) == true) {
1325 STC_LOGE("Invalid parameter");
1326 return STC_ERROR_INVALID_PARAMETER;
1329 ret = _stc_fw_chain_unset((stc_fw_chain_s *)chain_h);
1330 if (ret != STC_ERROR_NONE) {
1331 STC_LOGE("Failed to unset firewall cahin [%s]",
1332 _stc_convert_error_type_to_string(ret));
1336 return STC_ERROR_NONE;
1339 EXPORT_API int stc_firewall_rule_create(stc_h stc, stc_firewall_rule_h *rule_h)
1341 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1343 if (!(_stc_handle_check_validity(stc))) {
1344 STC_LOGE("Invalid parameter");
1345 return STC_ERROR_INVALID_PARAMETER;
1349 STC_LOGE("Invalid parameter");
1350 return STC_ERROR_INVALID_PARAMETER;
1353 stc_fw_rule_s *fw_rule = MALLOC0(stc_fw_rule_s, 1);
1355 STC_LOGE("Memory allocation failed");
1356 return STC_ERROR_OUT_OF_MEMORY;
1359 __stc_fw_init_rule(fw_rule);
1360 __stc_fw_add_to_rule_list((stc_firewall_rule_h)fw_rule);
1362 *rule_h = (stc_firewall_rule_h)fw_rule;
1364 STC_LOGI("Firewall rule successfully created");
1366 return STC_ERROR_NONE;
1369 EXPORT_API int stc_firewall_rule_clone(stc_firewall_rule_h origin_h,
1370 stc_firewall_rule_h *cloned_rule_h)
1372 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1374 if (__stc_fw_check_rule_validity(origin_h) == false ||
1375 cloned_rule_h == NULL) {
1376 STC_LOGE("Invalid parameter");
1377 return STC_ERROR_INVALID_PARAMETER;
1380 stc_fw_rule_s *fw_rule = MALLOC0(stc_fw_rule_s, 1);
1382 STC_LOGE("Memory allocation failed");
1383 return STC_ERROR_OUT_OF_MEMORY;
1386 __stc_fw_clone_rule(origin_h, fw_rule);
1387 __stc_fw_add_to_rule_list((stc_firewall_rule_h)fw_rule);
1389 *cloned_rule_h = (stc_firewall_rule_h)fw_rule;
1391 STC_LOGI("Firewall rule successfully cloned");
1393 return STC_ERROR_NONE;
1396 EXPORT_API int stc_firewall_rule_destroy(stc_firewall_rule_h rule_h)
1398 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1400 if (__stc_fw_check_rule_validity(rule_h) == false) {
1401 STC_LOGE("Invalid parameter");
1402 return STC_ERROR_INVALID_PARAMETER;
1405 __stc_fw_remove_from_rule_list(rule_h);
1406 __stc_fw_deinit_rule(rule_h);
1408 STC_LOGI("Firewall rule successfully destroyed");
1410 return STC_ERROR_NONE;
1413 EXPORT_API int stc_firewall_rule_set_chain(stc_firewall_rule_h rule_h, char *chain)
1415 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1417 if (__stc_fw_check_rule_validity(rule_h) == false) {
1418 STC_LOGE("Invalid parameter");
1419 return STC_ERROR_INVALID_PARAMETER;
1422 if (!chain || strlen(chain) == 0) {
1423 STC_LOGE("Invalid parameter");
1424 return STC_ERROR_INVALID_PARAMETER;
1427 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1429 FREE(fw_rule->chain);
1430 fw_rule->chain = g_strdup(chain);
1432 STC_LOGI("Chain [%s]", fw_rule->chain);
1434 return STC_ERROR_NONE;
1437 EXPORT_API int stc_firewall_rule_set_direction(stc_firewall_rule_h rule_h,
1438 stc_firewall_direction_e direction)
1440 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1442 if (__stc_fw_check_rule_validity(rule_h) == false) {
1443 STC_LOGE("Invalid parameter");
1444 return STC_ERROR_INVALID_PARAMETER;
1447 if (direction > STC_FIREWALL_DIRECTION_OUT) {
1448 STC_LOGE("Invalid parameter");
1449 return STC_ERROR_INVALID_PARAMETER;
1452 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1454 fw_rule->direction = direction;
1456 STC_LOGI("Direction [%u]", fw_rule->direction);
1458 return STC_ERROR_NONE;
1461 EXPORT_API int stc_firewall_rule_set_src_ip_type(stc_firewall_rule_h rule_h,
1462 stc_firewall_ip_type_e type)
1464 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1466 if (__stc_fw_check_rule_validity(rule_h) == false) {
1467 STC_LOGE("Invalid parameter");
1468 return STC_ERROR_INVALID_PARAMETER;
1471 if (type > STC_FIREWALL_IP_RANGE) {
1472 STC_LOGE("Invalid parameter");
1473 return STC_ERROR_INVALID_PARAMETER;
1476 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1478 fw_rule->s_ip_type = type;
1480 STC_LOGI("Source IP type [%u]", fw_rule->s_ip_type);
1482 return STC_ERROR_NONE;
1485 EXPORT_API int stc_firewall_rule_set_dst_ip_type(stc_firewall_rule_h rule_h,
1486 stc_firewall_ip_type_e type)
1488 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1490 if (__stc_fw_check_rule_validity(rule_h) == false) {
1491 STC_LOGE("Invalid parameter");
1492 return STC_ERROR_INVALID_PARAMETER;
1495 if (type > STC_FIREWALL_IP_RANGE) {
1496 STC_LOGE("Invalid parameter");
1497 return STC_ERROR_INVALID_PARAMETER;
1500 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1502 fw_rule->d_ip_type = type;
1504 STC_LOGI("Destination IP type [%u]", fw_rule->d_ip_type);
1506 return STC_ERROR_NONE;
1509 EXPORT_API int stc_firewall_rule_set_src_port_type(stc_firewall_rule_h rule_h,
1510 stc_firewall_port_type_e type)
1512 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1514 if (__stc_fw_check_rule_validity(rule_h) == false) {
1515 STC_LOGE("Invalid parameter");
1516 return STC_ERROR_INVALID_PARAMETER;
1519 if (type > STC_FIREWALL_PORT_RANGE) {
1520 STC_LOGE("Invalid parameter");
1521 return STC_ERROR_INVALID_PARAMETER;
1524 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1526 fw_rule->s_port_type = type;
1528 STC_LOGI("Source port type [%u]", fw_rule->s_port_type);
1530 return STC_ERROR_NONE;
1533 EXPORT_API int stc_firewall_rule_set_dst_port_type(stc_firewall_rule_h rule_h,
1534 stc_firewall_port_type_e type)
1536 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1538 if (__stc_fw_check_rule_validity(rule_h) == false) {
1539 STC_LOGE("Invalid parameter");
1540 return STC_ERROR_INVALID_PARAMETER;
1543 if (type > STC_FIREWALL_PORT_RANGE) {
1544 STC_LOGE("Invalid parameter");
1545 return STC_ERROR_INVALID_PARAMETER;
1548 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1550 fw_rule->d_port_type = type;
1552 STC_LOGI("Destination port type [%u]", fw_rule->d_port_type);
1554 return STC_ERROR_NONE;
1557 EXPORT_API int stc_firewall_rule_set_protocol_type(stc_firewall_rule_h rule_h,
1558 stc_firewall_protocol_type_e type)
1560 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1562 if (__stc_fw_check_rule_validity(rule_h) == false) {
1563 STC_LOGE("Invalid parameter");
1564 return STC_ERROR_INVALID_PARAMETER;
1567 if (type > STC_FIREWALL_PROTOCOL_ALL) {
1568 STC_LOGE("Invalid parameter");
1569 return STC_ERROR_INVALID_PARAMETER;
1572 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1574 fw_rule->protocol = type;
1576 STC_LOGI("Protocol type [%u]", fw_rule->protocol);
1578 return STC_ERROR_NONE;
1581 EXPORT_API int stc_firewall_rule_set_family_type(stc_firewall_rule_h rule_h,
1582 stc_firewall_family_type_e type)
1584 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1586 if (__stc_fw_check_rule_validity(rule_h) == false) {
1587 STC_LOGE("Invalid parameter");
1588 return STC_ERROR_INVALID_PARAMETER;
1591 if (type > STC_FIREWALL_FAMILY_V6) {
1592 STC_LOGE("Invalid parameter");
1593 return STC_ERROR_INVALID_PARAMETER;
1596 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1598 fw_rule->family = type;
1600 STC_LOGI("Family type [%u]", fw_rule->family);
1602 return STC_ERROR_NONE;
1605 EXPORT_API int stc_firewall_rule_set_src_ip(stc_firewall_rule_h rule_h,
1606 char *ip1, char *ip2)
1608 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1610 if (__stc_fw_check_rule_validity(rule_h) == false) {
1611 STC_LOGE("Invalid parameter");
1612 return STC_ERROR_INVALID_PARAMETER;
1615 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1617 FREE(fw_rule->s_ip1);
1618 FREE(fw_rule->s_ip2);
1619 fw_rule->s_ip1 = g_strdup(ip1);
1620 fw_rule->s_ip2 = g_strdup(ip2);
1622 STC_LOGI("Source IP [%s:%s]", fw_rule->s_ip1, fw_rule->s_ip2);
1624 return STC_ERROR_NONE;
1627 EXPORT_API int stc_firewall_rule_set_dst_ip(stc_firewall_rule_h rule_h,
1628 char *ip1, char *ip2)
1630 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1632 if (__stc_fw_check_rule_validity(rule_h) == false) {
1633 STC_LOGE("Invalid parameter");
1634 return STC_ERROR_INVALID_PARAMETER;
1637 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1639 FREE(fw_rule->d_ip1);
1640 FREE(fw_rule->d_ip2);
1641 fw_rule->d_ip1 = g_strdup(ip1);
1642 fw_rule->d_ip2 = g_strdup(ip2);
1644 STC_LOGI("Destination IP [%s:%s]", fw_rule->d_ip1, fw_rule->d_ip2);
1646 return STC_ERROR_NONE;
1649 EXPORT_API int stc_firewall_rule_set_src_port(stc_firewall_rule_h rule_h,
1650 unsigned int port1, unsigned int port2)
1652 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1654 if (__stc_fw_check_rule_validity(rule_h) == false) {
1655 STC_LOGE("Invalid parameter");
1656 return STC_ERROR_INVALID_PARAMETER;
1659 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1661 fw_rule->s_port1 = port1;
1662 fw_rule->s_port2 = port2;
1664 STC_LOGI("Source port [%u:%u]", fw_rule->s_port1, fw_rule->s_port2);
1666 return STC_ERROR_NONE;
1669 EXPORT_API int stc_firewall_rule_set_dst_port(stc_firewall_rule_h rule_h,
1670 unsigned int port1, unsigned int port2)
1672 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1674 if (__stc_fw_check_rule_validity(rule_h) == false) {
1675 STC_LOGE("Invalid parameter");
1676 return STC_ERROR_INVALID_PARAMETER;
1679 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1681 fw_rule->d_port1 = port1;
1682 fw_rule->d_port2 = port2;
1684 STC_LOGI("Destination port [%u:%u]", fw_rule->d_port1, fw_rule->d_port2);
1686 return STC_ERROR_NONE;
1689 EXPORT_API int stc_firewall_rule_set_ifname(stc_firewall_rule_h rule_h, char *ifname)
1691 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1693 if (__stc_fw_check_rule_validity(rule_h) == false) {
1694 STC_LOGE("Invalid parameter");
1695 return STC_ERROR_INVALID_PARAMETER;
1698 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1700 FREE(fw_rule->ifname);
1701 fw_rule->ifname = g_strdup(ifname);
1703 STC_LOGI("Interface name [%s]", fw_rule->ifname);
1705 return STC_ERROR_NONE;
1708 EXPORT_API int stc_firewall_rule_set_target(stc_firewall_rule_h rule_h,
1709 stc_firewall_rule_target_e target)
1711 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1713 if (__stc_fw_check_rule_validity(rule_h) == false) {
1714 STC_LOGE("Invalid parameter");
1715 return STC_ERROR_INVALID_PARAMETER;
1718 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1720 fw_rule->target = target;
1722 STC_LOGI("Target [%s]",
1723 _stc_convert_fw_rule_target_to_string(fw_rule->target));
1725 return STC_ERROR_NONE;
1728 EXPORT_API int stc_firewall_rule_set_log_level(stc_firewall_rule_h rule_h,
1729 unsigned char level)
1731 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1733 if (__stc_fw_check_rule_validity(rule_h) == false) {
1734 STC_LOGE("Invalid parameter");
1735 return STC_ERROR_INVALID_PARAMETER;
1738 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1740 fw_rule->log_level = level;
1742 STC_LOGI("Log level [%u]", fw_rule->log_level);
1744 return STC_ERROR_NONE;
1747 EXPORT_API int stc_firewall_rule_set_log_prefix(stc_firewall_rule_h rule_h,
1750 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1752 if (__stc_fw_check_rule_validity(rule_h) == false) {
1753 STC_LOGE("Invalid parameter");
1754 return STC_ERROR_INVALID_PARAMETER;
1757 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1759 FREE(fw_rule->log_prefix);
1760 fw_rule->log_prefix = g_strdup(prefix);
1762 STC_LOGI("Log prefix [%s]", fw_rule->log_prefix);
1764 return STC_ERROR_NONE;
1767 EXPORT_API int stc_firewall_rule_set_nflog_group(stc_firewall_rule_h rule_h,
1770 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1772 if (__stc_fw_check_rule_validity(rule_h) == false) {
1773 STC_LOGE("Invalid parameter");
1774 return STC_ERROR_INVALID_PARAMETER;
1777 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1779 fw_rule->nflog_group = group;
1781 STC_LOGI("Nflog group [%d]", fw_rule->nflog_group);
1783 return STC_ERROR_NONE;
1786 EXPORT_API int stc_firewall_rule_set_nflog_prefix(stc_firewall_rule_h rule_h,
1789 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1791 if (__stc_fw_check_rule_validity(rule_h) == false) {
1792 STC_LOGE("Invalid parameter");
1793 return STC_ERROR_INVALID_PARAMETER;
1796 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1798 FREE(fw_rule->nflog_prefix);
1799 fw_rule->nflog_prefix = g_strdup(prefix);
1801 STC_LOGI("Nflog prefix [%s]", fw_rule->nflog_prefix);
1803 return STC_ERROR_NONE;
1806 EXPORT_API int stc_firewall_rule_set_nflog_range(stc_firewall_rule_h rule_h,
1809 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1811 if (__stc_fw_check_rule_validity(rule_h) == false) {
1812 STC_LOGE("Invalid parameter");
1813 return STC_ERROR_INVALID_PARAMETER;
1816 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1818 fw_rule->nflog_range = range;
1820 STC_LOGI("Nflog range [%d]", fw_rule->nflog_range);
1822 return STC_ERROR_NONE;
1825 EXPORT_API int stc_firewall_rule_set_nflog_threshold(stc_firewall_rule_h rule_h,
1826 unsigned int threshold)
1828 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1830 if (__stc_fw_check_rule_validity(rule_h) == false) {
1831 STC_LOGE("Invalid parameter");
1832 return STC_ERROR_INVALID_PARAMETER;
1835 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1837 fw_rule->nflog_threshold = threshold;
1839 STC_LOGI("Nflog threshold [%d]", fw_rule->nflog_threshold);
1841 return STC_ERROR_NONE;
1844 EXPORT_API int stc_firewall_rule_get_chain(stc_firewall_rule_h rule_h, char **chain)
1846 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1848 if (__stc_fw_check_rule_validity(rule_h) == false) {
1849 STC_LOGE("Invalid parameter");
1850 return STC_ERROR_INVALID_PARAMETER;
1854 STC_LOGE("Invalid parameter");
1855 return STC_ERROR_INVALID_PARAMETER;
1858 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1860 *chain = g_strdup(fw_rule->chain);
1862 STC_LOGI("Chain [%s]", *chain);
1864 return STC_ERROR_NONE;
1867 EXPORT_API int stc_firewall_rule_get_direction(stc_firewall_rule_h rule_h,
1868 stc_firewall_direction_e *direction)
1870 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1872 if (__stc_fw_check_rule_validity(rule_h) == false) {
1873 STC_LOGE("Invalid parameter");
1874 return STC_ERROR_INVALID_PARAMETER;
1878 STC_LOGE("Invalid parameter");
1879 return STC_ERROR_INVALID_PARAMETER;
1882 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1884 *direction = fw_rule->direction;
1886 STC_LOGI("Direction [%s]", _stc_convert_fw_direction_to_string(*direction));
1888 return STC_ERROR_NONE;
1891 EXPORT_API int stc_firewall_rule_get_src_ip_type(stc_firewall_rule_h rule_h,
1892 stc_firewall_ip_type_e *type)
1894 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1896 if (__stc_fw_check_rule_validity(rule_h) == false) {
1897 STC_LOGE("Invalid parameter");
1898 return STC_ERROR_INVALID_PARAMETER;
1902 STC_LOGE("Invalid parameter");
1903 return STC_ERROR_INVALID_PARAMETER;
1906 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1908 *type = fw_rule->s_ip_type;
1910 STC_LOGI("Source IP type [%s]", _stc_convert_fw_ip_type_to_string(*type));
1912 return STC_ERROR_NONE;
1915 EXPORT_API int stc_firewall_rule_get_dst_ip_type(stc_firewall_rule_h rule_h,
1916 stc_firewall_ip_type_e *type)
1918 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1920 if (__stc_fw_check_rule_validity(rule_h) == false) {
1921 STC_LOGE("Invalid parameter");
1922 return STC_ERROR_INVALID_PARAMETER;
1926 STC_LOGE("Invalid parameter");
1927 return STC_ERROR_INVALID_PARAMETER;
1930 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1932 *type = fw_rule->d_ip_type;
1934 STC_LOGI("Destination IP type [%s]", _stc_convert_fw_ip_type_to_string(*type));
1936 return STC_ERROR_NONE;
1939 EXPORT_API int stc_firewall_rule_get_src_port_type(stc_firewall_rule_h rule_h,
1940 stc_firewall_port_type_e *type)
1942 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1944 if (__stc_fw_check_rule_validity(rule_h) == false) {
1945 STC_LOGE("Invalid parameter");
1946 return STC_ERROR_INVALID_PARAMETER;
1950 STC_LOGE("Invalid parameter");
1951 return STC_ERROR_INVALID_PARAMETER;
1954 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1956 *type = fw_rule->s_port_type;
1958 STC_LOGI("Source port type [%s]", _stc_convert_fw_port_type_to_string(*type));
1960 return STC_ERROR_NONE;
1963 EXPORT_API int stc_firewall_rule_get_dst_port_type(stc_firewall_rule_h rule_h,
1964 stc_firewall_port_type_e *type)
1966 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1968 if (__stc_fw_check_rule_validity(rule_h) == false) {
1969 STC_LOGE("Invalid parameter");
1970 return STC_ERROR_INVALID_PARAMETER;
1974 STC_LOGE("Invalid parameter");
1975 return STC_ERROR_INVALID_PARAMETER;
1978 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
1980 *type = fw_rule->d_port_type;
1982 STC_LOGI("Destination port type [%s]", _stc_convert_fw_port_type_to_string(*type));
1984 return STC_ERROR_NONE;
1987 EXPORT_API int stc_firewall_rule_get_protocol_type(stc_firewall_rule_h rule_h,
1988 stc_firewall_protocol_type_e *type)
1990 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
1992 if (__stc_fw_check_rule_validity(rule_h) == false) {
1993 STC_LOGE("Invalid parameter");
1994 return STC_ERROR_INVALID_PARAMETER;
1998 STC_LOGE("Invalid parameter");
1999 return STC_ERROR_INVALID_PARAMETER;
2002 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2004 *type = fw_rule->protocol;
2006 STC_LOGI("Protocol type [%s]", _stc_convert_fw_protocol_type_to_string(*type));
2008 return STC_ERROR_NONE;
2011 EXPORT_API int stc_firewall_rule_get_family_type(stc_firewall_rule_h rule_h,
2012 stc_firewall_family_type_e *type)
2014 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2016 if (__stc_fw_check_rule_validity(rule_h) == false) {
2017 STC_LOGE("Invalid parameter");
2018 return STC_ERROR_INVALID_PARAMETER;
2022 STC_LOGE("Invalid parameter");
2023 return STC_ERROR_INVALID_PARAMETER;
2026 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2028 *type = fw_rule->family;
2030 STC_LOGI("Address family type [%s]", _stc_convert_fw_family_type_to_string(*type));
2032 return STC_ERROR_NONE;
2035 EXPORT_API int stc_firewall_rule_get_src_ip(stc_firewall_rule_h rule_h,
2036 char **ip1, char **ip2)
2038 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2040 if (__stc_fw_check_rule_validity(rule_h) == false) {
2041 STC_LOGE("Invalid parameter");
2042 return STC_ERROR_INVALID_PARAMETER;
2046 STC_LOGE("Invalid parameter");
2047 return STC_ERROR_INVALID_PARAMETER;
2050 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2052 *ip1 = g_strdup(fw_rule->s_ip1);
2053 *ip2 = g_strdup(fw_rule->s_ip2);
2055 STC_LOGI("Source IP [%s:%s]", *ip1, *ip2);
2057 return STC_ERROR_NONE;
2060 EXPORT_API int stc_firewall_rule_get_dst_ip(stc_firewall_rule_h rule_h,
2061 char **ip1, char **ip2)
2063 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2065 if (__stc_fw_check_rule_validity(rule_h) == false) {
2066 STC_LOGE("Invalid parameter");
2067 return STC_ERROR_INVALID_PARAMETER;
2071 STC_LOGE("Invalid parameter");
2072 return STC_ERROR_INVALID_PARAMETER;
2075 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2077 *ip1 = g_strdup(fw_rule->d_ip1);
2078 *ip2 = g_strdup(fw_rule->d_ip2);
2080 STC_LOGI("Destination IP [%s:%s]", *ip1, *ip2);
2082 return STC_ERROR_NONE;
2085 EXPORT_API int stc_firewall_rule_get_src_port(stc_firewall_rule_h rule_h,
2086 unsigned int *port1, unsigned int *port2)
2088 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2090 if (__stc_fw_check_rule_validity(rule_h) == false) {
2091 STC_LOGE("Invalid parameter");
2092 return STC_ERROR_INVALID_PARAMETER;
2095 if (!port1 || !port2) {
2096 STC_LOGE("Invalid parameter");
2097 return STC_ERROR_INVALID_PARAMETER;
2100 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2102 *port1 = fw_rule->s_port1;
2103 *port2 = fw_rule->s_port2;
2105 STC_LOGI("Source port [%u:%u]", *port1, *port2);
2107 return STC_ERROR_NONE;
2110 EXPORT_API int stc_firewall_rule_get_dst_port(stc_firewall_rule_h rule_h,
2111 unsigned int *port1, unsigned int *port2)
2113 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2115 if (__stc_fw_check_rule_validity(rule_h) == false) {
2116 STC_LOGE("Invalid parameter");
2117 return STC_ERROR_INVALID_PARAMETER;
2120 if (!port1 || !port2) {
2121 STC_LOGE("Invalid parameter");
2122 return STC_ERROR_INVALID_PARAMETER;
2125 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2127 *port1 = fw_rule->d_port1;
2128 *port2 = fw_rule->d_port2;
2130 STC_LOGI("Destination port [%u:%u]", *port1, *port2);
2132 return STC_ERROR_NONE;
2135 EXPORT_API int stc_firewall_rule_get_ifname(stc_firewall_rule_h rule_h, char **ifname)
2137 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2139 if (__stc_fw_check_rule_validity(rule_h) == false) {
2140 STC_LOGE("Invalid parameter");
2141 return STC_ERROR_INVALID_PARAMETER;
2145 STC_LOGE("Invalid parameter");
2146 return STC_ERROR_INVALID_PARAMETER;
2149 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2151 *ifname = g_strdup(fw_rule->ifname);
2153 STC_LOGI("Interface name [%s]", *ifname);
2155 return STC_ERROR_NONE;
2158 EXPORT_API int stc_firewall_rule_get_target(stc_firewall_rule_h rule_h,
2159 stc_firewall_rule_target_e *target)
2161 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2163 if (__stc_fw_check_rule_validity(rule_h) == false) {
2164 STC_LOGE("Invalid parameter");
2165 return STC_ERROR_INVALID_PARAMETER;
2169 STC_LOGE("Invalid parameter");
2170 return STC_ERROR_INVALID_PARAMETER;
2173 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2175 *target = fw_rule->target;
2177 STC_LOGI("Target [%s]", _stc_convert_fw_rule_target_to_string(*target));
2179 return STC_ERROR_NONE;
2182 EXPORT_API int stc_firewall_rule_get_log_level(stc_firewall_rule_h rule_h,
2183 unsigned char *level)
2185 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2187 if (__stc_fw_check_rule_validity(rule_h) == false) {
2188 STC_LOGE("Invalid parameter");
2189 return STC_ERROR_INVALID_PARAMETER;
2193 STC_LOGE("Invalid parameter");
2194 return STC_ERROR_INVALID_PARAMETER;
2197 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2199 *level = fw_rule->log_level;
2201 STC_LOGI("Log level [%u]", *level);
2203 return STC_ERROR_NONE;
2206 EXPORT_API int stc_firewall_rule_get_log_prefix(stc_firewall_rule_h rule_h,
2209 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2211 if (__stc_fw_check_rule_validity(rule_h) == false) {
2212 STC_LOGE("Invalid parameter");
2213 return STC_ERROR_INVALID_PARAMETER;
2217 STC_LOGE("Invalid parameter");
2218 return STC_ERROR_INVALID_PARAMETER;
2221 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2223 *prefix = g_strdup(fw_rule->log_prefix);
2225 STC_LOGI("Log prefix [%s]", *prefix);
2227 return STC_ERROR_NONE;
2230 EXPORT_API int stc_firewall_rule_get_nflog_group(stc_firewall_rule_h rule_h,
2231 unsigned int *group)
2233 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2235 if (__stc_fw_check_rule_validity(rule_h) == false) {
2236 STC_LOGE("Invalid parameter");
2237 return STC_ERROR_INVALID_PARAMETER;
2241 STC_LOGE("Invalid parameter");
2242 return STC_ERROR_INVALID_PARAMETER;
2245 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2247 *group = fw_rule->nflog_group;
2249 STC_LOGI("Nflog group [%d]", *group);
2251 return STC_ERROR_NONE;
2254 EXPORT_API int stc_firewall_rule_get_nflog_prefix(stc_firewall_rule_h rule_h,
2257 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2259 if (__stc_fw_check_rule_validity(rule_h) == false) {
2260 STC_LOGE("Invalid parameter");
2261 return STC_ERROR_INVALID_PARAMETER;
2265 STC_LOGE("Invalid parameter");
2266 return STC_ERROR_INVALID_PARAMETER;
2269 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2271 *prefix = g_strdup(fw_rule->nflog_prefix);
2273 STC_LOGI("Nflog prefix [%s]", *prefix);
2275 return STC_ERROR_NONE;
2278 EXPORT_API int stc_firewall_rule_get_nflog_range(stc_firewall_rule_h rule_h,
2279 unsigned int *range)
2281 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2283 if (__stc_fw_check_rule_validity(rule_h) == false) {
2284 STC_LOGE("Invalid parameter");
2285 return STC_ERROR_INVALID_PARAMETER;
2289 STC_LOGE("Invalid parameter");
2290 return STC_ERROR_INVALID_PARAMETER;
2293 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2295 *range = fw_rule->nflog_range;
2297 STC_LOGI("Nflog range [%d]", *range);
2299 return STC_ERROR_NONE;
2302 EXPORT_API int stc_firewall_rule_get_nflog_threshold(stc_firewall_rule_h rule_h,
2303 unsigned int *threshold)
2305 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2307 if (__stc_fw_check_rule_validity(rule_h) == false) {
2308 STC_LOGE("Invalid parameter");
2309 return STC_ERROR_INVALID_PARAMETER;
2313 STC_LOGE("Invalid parameter");
2314 return STC_ERROR_INVALID_PARAMETER;
2317 stc_fw_rule_s *fw_rule = (stc_fw_rule_s *)rule_h;
2319 *threshold = fw_rule->nflog_threshold;
2321 STC_LOGI("Nflog threshold [%d]", *threshold);
2323 return STC_ERROR_NONE;
2326 EXPORT_API int stc_firewall_rule_add(stc_firewall_rule_h rule_h)
2328 int ret = STC_ERROR_NONE;
2330 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2332 if (__stc_fw_check_rule_validity(rule_h) == false) {
2333 STC_LOGE("Invalid parameter");
2334 return STC_ERROR_INVALID_PARAMETER;
2337 if (__stc_fw_check_rule_created(rule_h) == false) {
2338 STC_LOGE("Invalid parameter");
2339 return STC_ERROR_INVALID_PARAMETER;
2342 ret = _stc_fw_rule_add((stc_fw_rule_s *)rule_h);
2343 if (ret != STC_ERROR_NONE) {
2344 STC_LOGE("Failed to add firewall rule [%s]",
2345 _stc_convert_error_type_to_string(ret));
2349 return STC_ERROR_NONE;
2352 EXPORT_API int stc_firewall_rule_remove(stc_firewall_rule_h rule_h)
2354 int ret = STC_ERROR_NONE;
2356 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2358 if (__stc_fw_check_rule_validity(rule_h) == false) {
2359 STC_LOGE("Invalid parameter");
2360 return STC_ERROR_INVALID_PARAMETER;
2363 if (__stc_fw_check_rule_created(rule_h) == true) {
2364 STC_LOGE("Invalid parameter");
2365 return STC_ERROR_INVALID_PARAMETER;
2368 ret = _stc_fw_rule_remove((stc_fw_rule_s *)rule_h);
2369 if (ret != STC_ERROR_NONE) {
2370 STC_LOGE("Failed to remove firewall rule [%s]",
2371 _stc_convert_error_type_to_string(ret));
2375 return STC_ERROR_NONE;
2378 EXPORT_API int stc_firewall_rule_update(stc_firewall_rule_h rule_h)
2380 int ret = STC_ERROR_NONE;
2382 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2384 if (__stc_fw_check_rule_validity(rule_h) == false) {
2385 STC_LOGE("Invalid parameter");
2386 return STC_ERROR_INVALID_PARAMETER;
2389 if (__stc_fw_check_rule_created(rule_h) == true) {
2390 STC_LOGE("Invalid parameter");
2391 return STC_ERROR_INVALID_PARAMETER;
2394 ret = _stc_fw_rule_update((stc_fw_rule_s *)rule_h);
2395 if (ret != STC_ERROR_NONE) {
2396 STC_LOGE("Failed to update firewall rule [%s]",
2397 _stc_convert_error_type_to_string(ret));
2401 return STC_ERROR_NONE;
2403 EXPORT_API int stc_firewall_rule_foreach(stc_h stc,
2404 stc_firewall_rule_info_cb callback, void *user_data)
2406 int ret = STC_ERROR_NONE;
2408 CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_STC_FW);
2410 if (!(_stc_handle_check_validity(stc))) {
2411 STC_LOGE("Invalid parameter");
2412 return STC_ERROR_INVALID_PARAMETER;
2415 if (callback == NULL) {
2416 STC_LOGE("Invalid parameter");
2417 return STC_ERROR_INVALID_PARAMETER;
2420 ret = _stc_fw_rule_foreach(callback, user_data);
2421 if (ret != STC_ERROR_NONE) {
2422 STC_LOGE("Failed to get all firewall rule [%s]",
2423 _stc_convert_error_type_to_string(ret));
2427 return STC_ERROR_NONE;