static void test_nat_basic1(void) { struct connman_service *service; int err; service = g_try_new0(struct connman_service, 1); g_assert(service); nat_notifier->default_changed(service); err = __connman_nat_enable("bridge", "192.168.2.1", 24); g_assert(err == 0); /* test that table is not empty */ err = __connman_iptables_append("nat", "POSTROUTING", "-s 192.168.2.1/24 -o eth0 -j MASQUERADE"); g_assert(err == 0); err = __connman_iptables_commit("nat"); g_assert(err == 0); __connman_nat_disable("bridge"); /* test that table is empty again */ err = __connman_iptables_delete("nat", "POSTROUTING", "-s 192.168.2.1/24 -o eth0 -j MASQUERADE"); g_assert(err == 0); err = __connman_iptables_commit("nat"); g_assert(err == 0); g_free(service); }
/** * @brief Disconnect the associated modem */ static int network_disconnect(struct connman_network *network) { struct qmi_data *qmi = connman_network_get_data(network); DBG("Network %p %p", network, qmi); qmi = connman_network_get_data(network); if(!qmi) { connman_error("Could not get device data."); return -ENODEV; } DBG("Network %p %p", network, qmi); qmi->modem_connected = FALSE; if(qmi->network) connman_network_set_connected(qmi->network, FALSE); //FIXME Hack NAT enable by default __connman_nat_disable("qmi"); g_assert(qmi->qmi_proxy_device); /* Request disconnect */ g_dbus_proxy_method_call( qmi->qmi_proxy_device, DISCONNECT_DEVICE, NULL, network_disconnect_callback, qmi, NULL); return 0; }
static void test_nat_basic0(void) { int err; err = __connman_nat_enable("bridge", "192.168.2.1", 24); g_assert(err == 0); /* test that table is empty */ err = __connman_iptables_append("nat", "POSTROUTING", "-s 192.168.2.1/24 -o eth0 -j MASQUERADE"); g_assert(err == 0); err = __connman_iptables_commit("nat"); g_assert(err == 0); assert_rule_exists("nat", "-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE"); err = __connman_iptables_delete("nat", "POSTROUTING", "-s 192.168.2.1/24 -o eth0 -j MASQUERADE"); g_assert(err == 0); err = __connman_iptables_commit("nat"); g_assert(err == 0); assert_rule_not_exists("nat", "-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE"); __connman_nat_disable("bridge"); }
void __connman_tethering_set_disabled(void) { int index; DBG("enabled %d", tethering_enabled - 1); __connman_ipv6pd_cleanup(); index = connman_inet_ifindex(BRIDGE_NAME); __connman_dnsproxy_remove_listener(index); if (__sync_fetch_and_sub(&tethering_enabled, 1) != 1) return; __connman_nat_disable(BRIDGE_NAME); dhcp_server_stop(tethering_dhcp_server); tethering_dhcp_server = NULL; __connman_bridge_disable(BRIDGE_NAME); __connman_ippool_unref(dhcp_ippool); __connman_bridge_remove(BRIDGE_NAME); g_free(private_network_primary_dns); private_network_primary_dns = NULL; g_free(private_network_secondary_dns); private_network_secondary_dns = NULL; DBG("tethering stopped"); }
static int network_disconnect(struct connman_network *network) { struct mk3_data *mk3 = connman_network_get_data(network); DBG("Network %p %p", network, mk3); __connman_nat_disable("mk3"); return 0; }
void __connman_tethering_cleanup(void) { DBG("enabled %d", tethering_enabled); __sync_synchronize(); if (tethering_enabled > 0) { if (tethering_dhcp_server) dhcp_server_stop(tethering_dhcp_server); __connman_bridge_disable(BRIDGE_NAME); __connman_bridge_remove(BRIDGE_NAME); __connman_nat_disable(BRIDGE_NAME); } if (connection == NULL) return; g_hash_table_destroy(pn_hash); dbus_connection_unref(connection); }
static void remove_private_network(gpointer user_data) { struct connman_private_network *pn = user_data; __connman_nat_disable(BRIDGE_NAME); connman_rtnl_remove_watch(pn->iface_watch); __connman_ippool_unref(pn->pool); if (pn->watch > 0) { g_dbus_remove_watch(connection, pn->watch); pn->watch = 0; } close(pn->fd); g_free(pn->interface); g_free(pn->owner); g_free(pn->path); g_free(pn->primary_dns); g_free(pn->secondary_dns); g_free(pn); }
static void shutdown_nat(gpointer key, gpointer value, gpointer user_data) { const char *name = key; __connman_nat_disable(name); }