aboutsummaryrefslogtreecommitdiff
path: root/src/vpn/gnunet-service-vpn.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vpn/gnunet-service-vpn.c')
-rw-r--r--src/vpn/gnunet-service-vpn.c134
1 files changed, 89 insertions, 45 deletions
diff --git a/src/vpn/gnunet-service-vpn.c b/src/vpn/gnunet-service-vpn.c
index 8e6ae655d..c8ffa8586 100644
--- a/src/vpn/gnunet-service-vpn.c
+++ b/src/vpn/gnunet-service-vpn.c
@@ -2990,6 +2990,31 @@ client_disconnect (void *cls, struct GNUNET_SERVER_Client *client)
2990 2990
2991 2991
2992/** 2992/**
2993 * Test if the given AF is supported by this system.
2994 *
2995 * @param af to test
2996 * @return GNUNET_OK if the AF is supported
2997 */
2998static int
2999test_af (int af)
3000{
3001 int s;
3002
3003 s = socket (af, SOCK_STREAM, 0);
3004 if (-1 == s)
3005 {
3006 if (EAFNOSUPPORT == errno)
3007 return GNUNET_NO;
3008 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
3009 "socket");
3010 return GNUNET_SYSERR;
3011 }
3012 close (s);
3013 return GNUNET_OK;
3014}
3015
3016
3017/**
2993 * Main function that will be run by the scheduler. 3018 * Main function that will be run by the scheduler.
2994 * 3019 *
2995 * @param cls closure 3020 * @param cls closure
@@ -3062,59 +3087,78 @@ run (void *cls,
3062 return; 3087 return;
3063 } 3088 }
3064 vpn_argv[1] = ifname; 3089 vpn_argv[1] = ifname;
3065 if ( (GNUNET_SYSERR == 3090 if (GNUNET_OK == test_af (AF_INET6))
3066 GNUNET_CONFIGURATION_get_value_string (cfg, "vpn", "IPV6ADDR",
3067 &ipv6addr) ||
3068 (1 != inet_pton (AF_INET6, ipv6addr, &v6))) )
3069 { 3091 {
3070 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 3092 if ( (GNUNET_SYSERR ==
3071 "No valid entry 'IPV6ADDR' in configuration!\n"); 3093 GNUNET_CONFIGURATION_get_value_string (cfg, "vpn", "IPV6ADDR",
3072 GNUNET_SCHEDULER_shutdown (); 3094 &ipv6addr) ||
3073 return; 3095 (1 != inet_pton (AF_INET6, ipv6addr, &v6))) )
3074 } 3096 {
3075 vpn_argv[2] = ipv6addr; 3097 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
3076 if (GNUNET_SYSERR == 3098 "No valid entry 'IPV6ADDR' in configuration!\n");
3077 GNUNET_CONFIGURATION_get_value_string (cfg, "vpn", "IPV6PREFIX", 3099 GNUNET_SCHEDULER_shutdown ();
3078 &ipv6prefix_s)) 3100 return;
3079 { 3101 }
3080 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 3102 vpn_argv[2] = ipv6addr;
3081 "No entry 'IPV6PREFIX' in configuration!\n"); 3103 if (GNUNET_SYSERR ==
3082 GNUNET_SCHEDULER_shutdown (); 3104 GNUNET_CONFIGURATION_get_value_string (cfg, "vpn", "IPV6PREFIX",
3083 return; 3105 &ipv6prefix_s))
3106 {
3107 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
3108 "No entry 'IPV6PREFIX' in configuration!\n");
3109 GNUNET_SCHEDULER_shutdown ();
3110 return;
3111 }
3112 vpn_argv[3] = ipv6prefix_s;
3113 if ( (GNUNET_OK !=
3114 GNUNET_CONFIGURATION_get_value_number (cfg, "vpn",
3115 "IPV6PREFIX",
3116 &ipv6prefix)) ||
3117 (ipv6prefix >= 127) )
3118 {
3119 GNUNET_SCHEDULER_shutdown ();
3120 return;
3121 }
3084 } 3122 }
3085 vpn_argv[3] = ipv6prefix_s; 3123 else
3086 if ( (GNUNET_OK !=
3087 GNUNET_CONFIGURATION_get_value_number (cfg, "vpn",
3088 "IPV6PREFIX",
3089 &ipv6prefix)) ||
3090 (ipv6prefix >= 127) )
3091 { 3124 {
3092 GNUNET_SCHEDULER_shutdown (); 3125 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
3093 return; 3126 _("IPv6 support disabled as this system does not support IPv6\n"));
3127 vpn_argv[2] = GNUNET_strdup ("-");
3128 vpn_argv[3] = GNUNET_strdup ("-");
3094 } 3129 }
3095 3130 if (GNUNET_OK == test_af (AF_INET))
3096 if ( (GNUNET_SYSERR ==
3097 GNUNET_CONFIGURATION_get_value_string (cfg, "vpn", "IPV4ADDR",
3098 &ipv4addr) ||
3099 (1 != inet_pton (AF_INET, ipv4addr, &v4))) )
3100 { 3131 {
3101 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 3132 if ( (GNUNET_SYSERR ==
3102 "No valid entry for 'IPV4ADDR' in configuration!\n"); 3133 GNUNET_CONFIGURATION_get_value_string (cfg, "vpn", "IPV4ADDR",
3103 GNUNET_SCHEDULER_shutdown (); 3134 &ipv4addr) ||
3104 return; 3135 (1 != inet_pton (AF_INET, ipv4addr, &v4))) )
3136 {
3137 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
3138 "No valid entry for 'IPV4ADDR' in configuration!\n");
3139 GNUNET_SCHEDULER_shutdown ();
3140 return;
3141 }
3142 vpn_argv[4] = ipv4addr;
3143 if ( (GNUNET_SYSERR ==
3144 GNUNET_CONFIGURATION_get_value_string (cfg, "vpn", "IPV4MASK",
3145 &ipv4mask) ||
3146 (1 != inet_pton (AF_INET, ipv4mask, &v4))) )
3147 {
3148 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
3149 "No valid entry 'IPV4MASK' in configuration!\n");
3150 GNUNET_SCHEDULER_shutdown ();
3151 return;
3152 }
3153 vpn_argv[5] = ipv4mask;
3105 } 3154 }
3106 vpn_argv[4] = ipv4addr; 3155 else
3107 if ( (GNUNET_SYSERR ==
3108 GNUNET_CONFIGURATION_get_value_string (cfg, "vpn", "IPV4MASK",
3109 &ipv4mask) ||
3110 (1 != inet_pton (AF_INET, ipv4mask, &v4))) )
3111 { 3156 {
3112 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 3157 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
3113 "No valid entry 'IPV4MASK' in configuration!\n"); 3158 _("IPv4 support disabled as this system does not support IPv4\n"));
3114 GNUNET_SCHEDULER_shutdown (); 3159 vpn_argv[4] = GNUNET_strdup ("-");
3115 return; 3160 vpn_argv[5] = GNUNET_strdup ("-");
3116 } 3161 }
3117 vpn_argv[5] = ipv4mask;
3118 vpn_argv[6] = NULL; 3162 vpn_argv[6] = NULL;
3119 3163
3120 mesh_handle = 3164 mesh_handle =