Config is written to file insteadof stdout
authorAndreas Tonnesen <andreto@olsr.org>
Sat, 16 Oct 2004 23:14:36 +0000 (23:14 +0000)
committerAndreas Tonnesen <andreto@olsr.org>
Sat, 16 Oct 2004 23:14:36 +0000 (23:14 +0000)
src/cfgparser/olsrd_conf.c

index 16bdd91..99a8526 100644 (file)
@@ -65,7 +65,10 @@ main(int argc, char *argv[])
   if((cnf = olsrd_parse_cnf(argv[1])) != NULL)
     {
       if((argc > 2) && (!strcmp(argv[2], "-print")))
-       olsrd_write_cnf(cnf, "foo");//olsrd_print_cnf(cnf);  
+       {
+         olsrd_print_cnf(cnf);  
+         olsrd_write_cnf(cnf, "./out.conf");
+       }
       else
         printf("Use -print to view parsed values\n");
       printf("Configfile parsed OK\n");
@@ -242,182 +245,197 @@ olsrd_write_cnf(struct olsrd_config *cnf, char *fname)
   char ipv6_buf[100];             /* buffer for IPv6 inet_htop */
   struct in_addr in4;
 
-  printf("#\n# Configuration file for olsr.org olsrd\n# automatically generated by olsrd-cnf %s\n#\n\n\n", SOFTWARE_VERSION);
+  FILE *fd;
+
+  fd = fopen(fname, "w");
+
+  if(fd == NULL)
+    {
+      fprintf(stderr, "Could not open file %s for writing\n%s\n", fname, strerror(errno));
+      return -1;
+    }
+
+  printf("Writing config to file \"%s\".... ", fname);
+
+  fprintf(fd, "#\n# Configuration file for olsr.org olsrd\n# automatically generated by olsrd-cnf %s\n#\n\n\n", SOFTWARE_VERSION);
 
   /* Debug level */
-  printf("# Debug level(0-9)\n# If set to 0 the daemon runs in the background\n\nDebugLevel\t%d\n\n", cnf->debug_level);
+  fprintf(fd, "# Debug level(0-9)\n# If set to 0 the daemon runs in the background\n\nDebugLevel\t%d\n\n", cnf->debug_level);
 
   /* IP version */
-  printf("# IP version to use (4 or 6)\n\nIpVersion\t%d\n\n", cnf->ip_version);
+  fprintf(fd, "# IP version to use (4 or 6)\n\nIpVersion\t%d\n\n", cnf->ip_version);
 
 
   /* HNA IPv4 */
-  printf("# HNA IPv4 routes\n# syntax: netaddr netmask\n# Example Internet gateway:\n# 0.0.0.0 0.0.0.0\n\nHna4\n{\n");
+  fprintf(fd, "# HNA IPv4 routes\n# syntax: netaddr netmask\n# Example Internet gateway:\n# 0.0.0.0 0.0.0.0\n\nHna4\n{\n");
   if(h4)
     {
       while(h4)
        {
          in4.s_addr=h4->net;
-         printf("    %s ", inet_ntoa(in4));
+         fprintf(fd, "    %s ", inet_ntoa(in4));
          in4.s_addr=h4->netmask;
-         printf("%s\n", inet_ntoa(in4));
+         fprintf(fd, "%s\n", inet_ntoa(in4));
          h4 = h4->next;
        }
     }
-  printf("}\n\n");
+  fprintf(fd, "}\n\n");
 
 
   /* HNA IPv6 */
-  printf("# HNA IPv6 routes\n# syntax: netaddr prefix\n# Example Internet gateway:\nHna6\n{\n");
+  fprintf(fd, "# HNA IPv6 routes\n# syntax: netaddr prefix\n# Example Internet gateway:\nHna6\n{\n");
   if(h6)
     {
       while(h6)
        {
-         printf("    %s/%d\n", (char *)inet_ntop(AF_INET6, &h6->net.v6, ipv6_buf, sizeof(ipv6_buf)), h6->prefix_len);
+         fprintf(fd, "    %s/%d\n", (char *)inet_ntop(AF_INET6, &h6->net.v6, ipv6_buf, sizeof(ipv6_buf)), h6->prefix_len);
          h6 = h6->next;
        }
     }
 
-  printf("}\n\n");
+  fprintf(fd, "}\n\n");
 
 
   /* Interfaces */
-  printf("# Interfaces and their rulesets\nInterfaces\n{\n");
+  fprintf(fd, "# Interfaces and their rulesets\nInterfaces\n{\n");
   /* Interfaces */
   if(in)
     {
       while(in)
        {
-         printf("    \"%s\" \"%s\"\n", in->name, in->config);
+         fprintf(fd, "    \"%s\" \"%s\"\n", in->name, in->config);
          in = in->next;
        }
     }
-  printf("}\n\n");
+  fprintf(fd, "}\n\n");
 
 
   /* No interfaces */
-  printf("# Should olsrd keep on running even if there are\n# no interfaces available? This is a good idea\n# for a PCMCIA/USB hotswap environment.\n# \"yes\" OR \"no\"\n\nAllowNoInt\t");
+  fprintf(fd, "# Should olsrd keep on running even if there are\n# no interfaces available? This is a good idea\n# for a PCMCIA/USB hotswap environment.\n# \"yes\" OR \"no\"\n\nAllowNoInt\t");
   if(cnf->allow_no_interfaces)
-    printf("yes\n\n");
+    fprintf(fd, "yes\n\n");
   else
-    printf("no\n\n");
+    fprintf(fd, "no\n\n");
 
   /* TOS */
-  printf("# TOS(type of service) value for\n# the IP header of control traffic.\n# default is 16\n\n");
-  printf("TosValue\t%d\n\n", cnf->tos);
+  fprintf(fd, "# TOS(type of service) value for\n# the IP header of control traffic.\n# default is 16\n\n");
+  fprintf(fd, "TosValue\t%d\n\n", cnf->tos);
 
   /* Willingness */
-  printf("# The fixed willingness to use(0-7)\n# or \"auto\" to set willingness dynammically\n# based on battery/power status\n\n");
+  fprintf(fd, "# The fixed willingness to use(0-7)\n# or \"auto\" to set willingness dynammically\n# based on battery/power status\n\n");
   if(cnf->auto_willingness)
-    printf("Willingness\tauto\n\n");
+    fprintf(fd, "Willingness\tauto\n\n");
   else
-    printf("Willingness%d\n\n", cnf->fixed_willingness);
+    fprintf(fd, "Willingness%d\n\n", cnf->fixed_willingness);
 
   /* IPC */
-  printf("# Allow processes like the GUI front-end\n# to connect to the daemon. 'yes' or 'no'\n\n");
+  fprintf(fd, "# Allow processes like the GUI front-end\n# to connect to the daemon. 'yes' or 'no'\n\n");
   if(cnf->open_ipc)
-    printf("IpcConnect\tyes\n\n");
+    fprintf(fd, "IpcConnect\tyes\n\n");
   else
-    printf("IpcConnect\tno\n\n");
+    fprintf(fd, "IpcConnect\tno\n\n");
 
 
 
   /* Hysteresis */
-  printf("# Wether to use hysteresis or not\n# Hysteresis adds more robustness to the\n# link sensing but delays neighbor registration.\n# Used by default. 'yes' or 'no'\n\n");
+  fprintf(fd, "# Wether to use hysteresis or not\n# Hysteresis adds more robustness to the\n# link sensing but delays neighbor registration.\n# Used by default. 'yes' or 'no'\n\n");
 
   if(cnf->use_hysteresis)
     {
-      printf("UseHysteresis\tyes\n\n");
-      printf("# Hysteresis parameters\n# Do not alter these unless you know \n# what you are doing!\n# Set to auto by default. Allowed\n# values are floating point values\n# in the interval 0,1\n# THR_LOW must always be lower than\n# THR_HIGH!!\n\n");
-      printf("HystScaling\t%0.2f\n", cnf->hysteresis_param.scaling);
-      printf("HystThrHigh\t%0.2f\n", cnf->hysteresis_param.thr_high);
-      printf("HystThrLow\t%0.2f\n", cnf->hysteresis_param.thr_low);
+      fprintf(fd, "UseHysteresis\tyes\n\n");
+      fprintf(fd, "# Hysteresis parameters\n# Do not alter these unless you know \n# what you are doing!\n# Set to auto by default. Allowed\n# values are floating point values\n# in the interval 0,1\n# THR_LOW must always be lower than\n# THR_HIGH!!\n\n");
+      fprintf(fd, "HystScaling\t%0.2f\n", cnf->hysteresis_param.scaling);
+      fprintf(fd, "HystThrHigh\t%0.2f\n", cnf->hysteresis_param.thr_high);
+      fprintf(fd, "HystThrLow\t%0.2f\n", cnf->hysteresis_param.thr_low);
     }
   else
-    printf("UseHysteresis\tno\n\n");
+    fprintf(fd, "UseHysteresis\tno\n\n");
 
-  printf("\n\n");
+  fprintf(fd, "\n\n");
 
   /* Pollrate */
-  printf("# Polling rate in seconds(float).\n# Auto uses default value 0.1 sec\n\n");
-  printf("Pollrate\t%0.2f\n", cnf->pollrate);
+  fprintf(fd, "# Polling rate in seconds(float).\n# Auto uses default value 0.1 sec\n\n");
+  fprintf(fd, "Pollrate\t%0.2f\n", cnf->pollrate);
 
   /* TC redundancy */
-  printf("# TC redundancy\n# Specifies how much neighbor info should\n# be sent in TC messages\n# Possible values are:\n# 0 - only send MPR selectors\n# 1 - send MPR selectors and MPRs\n# 2 - send all neighbors\n#\n# defaults to 0\n\n");
-  printf("TcRedundancy\t%d\n\n", cnf->tc_redundancy);
+  fprintf(fd, "# TC redundancy\n# Specifies how much neighbor info should\n# be sent in TC messages\n# Possible values are:\n# 0 - only send MPR selectors\n# 1 - send MPR selectors and MPRs\n# 2 - send all neighbors\n#\n# defaults to 0\n\n");
+  fprintf(fd, "TcRedundancy\t%d\n\n", cnf->tc_redundancy);
 
   /* MPR coverage */
-  printf("# MPR coverage\n# Specifies how many MPRs a node should\n# try select to reach every 2 hop neighbor\n# Can be set to any integer >0\n# defaults to 1\n\n");
+  fprintf(fd, "# MPR coverage\n# Specifies how many MPRs a node should\n# try select to reach every 2 hop neighbor\n# Can be set to any integer >0\n# defaults to 1\n\n");
 
-  printf("MprCoverage\t%d\n\n", cnf->mpr_coverage);
+  fprintf(fd, "MprCoverage\t%d\n\n", cnf->mpr_coverage);
    
 
 
   /* Plugins */
-  printf("# Olsrd plugins to load\n# This must be the absolute path to the file\n# or the loader will use the following scheme:\n# - Try the paths in the LD_LIBRARY_PATH \n#   environment variable.\n# - The list of libraries cached in /etc/ld.so.cache\n# - /lib, followed by /usr/lib\n\nLoadPlugin\n{\n");
+  fprintf(fd, "# Olsrd plugins to load\n# This must be the absolute path to the file\n# or the loader will use the following scheme:\n# - Try the paths in the LD_LIBRARY_PATH \n#   environment variable.\n# - The list of libraries cached in /etc/ld.so.cache\n# - /lib, followed by /usr/lib\n\nLoadPlugin\n{\n");
   if(pe)
     {
       while(pe)
        {
-         printf("    PlName \"%s\"\n", pe->name);
+         fprintf(fd, "    PlName \"%s\"\n", pe->name);
          pe = pe->next;
        }
     }
-  printf("}\n\n");
+  fprintf(fd, "}\n\n");
 
 
   /* Rulesets */
   while(io)
     {
-      printf("IfSetup \"%s\"\n{\n", io->name);
+      fprintf(fd, "IfSetup \"%s\"\n{\n", io->name);
 
       
-      printf("    # IPv4 broadcast address to use. The\n    # one usefull example would be 255.255.255.255\n    # If not defined the broadcastaddress\n    # every card is configured with is used\n\n");
+      fprintf(fd, "    # IPv4 broadcast address to use. The\n    # one usefull example would be 255.255.255.255\n    # If not defined the broadcastaddress\n    # every card is configured with is used\n\n");
 
       if(io->ipv4_broadcast.v4)
        {
          in4.s_addr = io->ipv4_broadcast.v4;
-         printf("    Ip4Broadcast\t %s\n\n", inet_ntoa(in4));
+         fprintf(fd, "    Ip4Broadcast\t %s\n\n", inet_ntoa(in4));
        }
       else
        {
-         printf("    #Ip4Broadcast\t255.255.255.255\n\n");
+         fprintf(fd, "    #Ip4Broadcast\t255.255.255.255\n\n");
        }
 
 
-      printf("    # IPv6 address scope to use.\n    # Must be 'site-local' or 'global'\n\n");
+      fprintf(fd, "    # IPv6 address scope to use.\n    # Must be 'site-local' or 'global'\n\n");
       if(io->ipv6_addrtype)
-       printf("    Ip6AddrType \tsite-local\n\n");
+       fprintf(fd, "    Ip6AddrType \tsite-local\n\n");
       else
-       printf("    Ip6AddrType \tglobal\n\n");
+       fprintf(fd, "    Ip6AddrType \tglobal\n\n");
 
-      printf("    # IPv6 multicast address to use when\n    # using site-local addresses.\n    # If not defined, ff05::15 is used\n");
-      printf("    Ip6MulticastSite\t%s\n\n", (char *)inet_ntop(AF_INET6, &io->ipv6_multi_site.v6, ipv6_buf, sizeof(ipv6_buf)));
-      printf("    # IPv6 multicast address to use when\n    # using global addresses\n    # If not defined, ff0e::1 is used\n");
-      printf("    Ip6MulticastGlobal\t%s\n\n", (char *)inet_ntop(AF_INET6, &io->ipv6_multi_glbl.v6, ipv6_buf, sizeof(ipv6_buf)));
+      fprintf(fd, "    # IPv6 multicast address to use when\n    # using site-local addresses.\n    # If not defined, ff05::15 is used\n");
+      fprintf(fd, "    Ip6MulticastSite\t%s\n\n", (char *)inet_ntop(AF_INET6, &io->ipv6_multi_site.v6, ipv6_buf, sizeof(ipv6_buf)));
+      fprintf(fd, "    # IPv6 multicast address to use when\n    # using global addresses\n    # If not defined, ff0e::1 is used\n");
+      fprintf(fd, "    Ip6MulticastGlobal\t%s\n\n", (char *)inet_ntop(AF_INET6, &io->ipv6_multi_glbl.v6, ipv6_buf, sizeof(ipv6_buf)));
 
 
 
-      printf("    # Emission intervals.\n    # If not defined, RFC proposed values will\n    # in most cases be used.\n\n");
+      fprintf(fd, "    # Emission intervals.\n    # If not defined, RFC proposed values will\n    # in most cases be used.\n\n");
 
 
-      printf("    HelloInterval\t%0.2f\n", io->hello_params.emission_interval);
-      printf("    HelloValidityTime\t%0.2f\n", io->hello_params.validity_time);
-      printf("    TcInterval\t\t%0.2f\n", io->tc_params.emission_interval);
-      printf("    TcValidityTime\t%0.2f\n", io->tc_params.validity_time);
-      printf("    MidInterval\t\t%0.2f\n", io->mid_params.emission_interval);
-      printf("    MidValidityTime\t%0.2f\n", io->mid_params.validity_time);
-      printf("    HnaInterval\t\t%0.2f\n", io->hna_params.emission_interval);
-      printf("    HnaValidityTime\t%0.2f\n", io->hna_params.validity_time);
+      fprintf(fd, "    HelloInterval\t%0.2f\n", io->hello_params.emission_interval);
+      fprintf(fd, "    HelloValidityTime\t%0.2f\n", io->hello_params.validity_time);
+      fprintf(fd, "    TcInterval\t\t%0.2f\n", io->tc_params.emission_interval);
+      fprintf(fd, "    TcValidityTime\t%0.2f\n", io->tc_params.validity_time);
+      fprintf(fd, "    MidInterval\t\t%0.2f\n", io->mid_params.emission_interval);
+      fprintf(fd, "    MidValidityTime\t%0.2f\n", io->mid_params.validity_time);
+      fprintf(fd, "    HnaInterval\t\t%0.2f\n", io->hna_params.emission_interval);
+      fprintf(fd, "    HnaValidityTime\t%0.2f\n", io->hna_params.validity_time);
 
 
 
       io = io->next;
 
-      printf("}\n\n\n");
+      fprintf(fd, "}\n\n\n");
     }
 
-  printf("\n# END AUTOGENERATED CONFIG\n");
+  fprintf(fd, "\n# END AUTOGENERATED CONFIG\n");
+
+  fclose(fd);
+  printf("DONE\n");
 
   return 1;
 }