"Fossies" - the Fresh Open Source Software Archive

Member "ospfd/printconf.c" (7 Jan 2009, 4518 Bytes) of package /linux/privat/old/openospfd-4.6.tgz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "printconf.c" see the Fossies "Dox" file reference documentation.

    1 /*  $OpenBSD: printconf.c,v 1.13 2009/01/07 21:16:36 claudio Exp $ */
    2 
    3 /*
    4  * Copyright (c) 2004, 2005 Esben Norby <norby@openbsd.org>
    5  *
    6  * Permission to use, copy, modify, and distribute this software for any
    7  * purpose with or without fee is hereby granted, provided that the above
    8  * copyright notice and this permission notice appear in all copies.
    9  *
   10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   17  */
   18 
   19 #include <sys/queue.h>
   20 #include <sys/types.h>
   21 #include <sys/socket.h>
   22 #include <netinet/in.h>
   23 #include <arpa/inet.h>
   24 
   25 #include <stdio.h>
   26 
   27 #include "ospf.h"
   28 #include "ospfd.h"
   29 #include "ospfe.h"
   30 
   31 void    print_mainconf(struct ospfd_conf *);
   32 const char *print_no(u_int16_t);
   33 void    print_redistribute(struct redist_list *);
   34 void    print_rtlabel(struct ospfd_conf *);
   35 void    print_iface(struct iface *);
   36 
   37 void
   38 print_mainconf(struct ospfd_conf *conf)
   39 {
   40     printf("router-id %s\n", inet_ntoa(conf->rtr_id));
   41 
   42     if (conf->flags & OSPFD_FLAG_NO_FIB_UPDATE)
   43         printf("fib-update no\n");
   44     else
   45         printf("fib-update yes\n");
   46 
   47     if (conf->rfc1583compat)
   48         printf("rfc1583compat yes\n");
   49     else
   50         printf("rfc1583compat no\n");
   51 
   52     if (conf->flags & OSPFD_FLAG_STUB_ROUTER)
   53         printf("stub router yes\n");
   54 
   55     print_redistribute(&conf->redist_list);
   56     print_rtlabel(conf);
   57 
   58     printf("spf-delay %u\n", conf->spf_delay);
   59     printf("spf-holdtime %u\n", conf->spf_hold_time);
   60 }
   61 
   62 const char *
   63 print_no(u_int16_t type)
   64 {
   65     if (type & REDIST_NO)
   66         return ("no ");
   67     else
   68         return ("");
   69 }
   70 
   71 void
   72 print_redistribute(struct redist_list *rlh)
   73 {
   74     struct redistribute *r;
   75 
   76     SIMPLEQ_FOREACH(r, rlh, entry) {
   77         switch (r->type & ~REDIST_NO) {
   78         case REDIST_STATIC:
   79             printf("%sredistribute static\n", print_no(r->type));
   80             break;
   81         case REDIST_CONNECTED:
   82             printf("%sredistribute connected\n", print_no(r->type));
   83             break;
   84         case REDIST_LABEL:
   85             printf("%sredistribute rtlabel %s\n",
   86                 print_no(r->type), rtlabel_id2name(r->label));
   87             break;
   88         case REDIST_ADDR:
   89             printf("%sredistribute %s/%d\n",
   90                 print_no(r->type), inet_ntoa(r->addr),
   91                 mask2prefixlen(r->mask.s_addr));
   92             break;
   93         case REDIST_DEFAULT:
   94             printf("%sredistribute default\n", print_no(r->type));
   95             break;
   96         }
   97     }
   98 }
   99 
  100 void
  101 print_rtlabel(struct ospfd_conf *conf)
  102 {
  103     struct n2id_label   *label;
  104 
  105     TAILQ_FOREACH(label, &rt_labels, entry)
  106         if (label->ext_tag)
  107             printf("rtlabel \"%s\" external-tag %u\n",
  108                 label->name, label->ext_tag);
  109 }
  110 
  111 void
  112 print_iface(struct iface *iface)
  113 {
  114     struct auth_md  *md;
  115 
  116     printf("\tinterface %s:%s {\n", iface->name, inet_ntoa(iface->addr));
  117 
  118     printf("\t\thello-interval %d\n", iface->hello_interval);
  119     printf("\t\tmetric %d\n", iface->metric);
  120 
  121     if (iface->passive)
  122         printf("\t\tpassive\n");
  123     if (*iface->demote_group)
  124         printf("\t\tdemote %s\n", iface->demote_group);
  125 
  126     printf("\t\tretransmit-interval %d\n", iface->rxmt_interval);
  127     printf("\t\trouter-dead-time %d\n", iface->dead_interval);
  128     printf("\t\trouter-priority %d\n", iface->priority);
  129     printf("\t\ttransmit-delay %d\n", iface->transmit_delay);
  130 
  131     printf("\t\tauth-type %s\n", if_auth_name(iface->auth_type));
  132     switch (iface->auth_type) {
  133     case AUTH_TYPE_NONE:
  134         break;
  135     case AUTH_TYPE_SIMPLE:
  136         printf("\t\tauth-key XXXXXX\n");
  137         break;
  138     case AUTH_TYPE_CRYPT:
  139         printf("\t\tauth-md-keyid %d\n", iface->auth_keyid);
  140         TAILQ_FOREACH(md, &iface->auth_md_list, entry)
  141             printf("\t\tauth-md %d XXXXXX\n", md->keyid);
  142         break;
  143     default:
  144         printf("\t\tunknown auth type!\n");
  145         break;
  146     }
  147 
  148     printf("\t}\n");
  149 }
  150 
  151 void
  152 print_config(struct ospfd_conf *conf)
  153 {
  154     struct area *area;
  155     struct iface    *iface;
  156 
  157     printf("\n");
  158     print_mainconf(conf);
  159     printf("\n");
  160 
  161     LIST_FOREACH(area, &conf->area_list, entry) {
  162         printf("area %s {\n", inet_ntoa(area->id));
  163         if (area->stub) {
  164             printf("\tstub");
  165             if (SIMPLEQ_EMPTY(&area->redist_list))
  166                 printf("\n");
  167             else {
  168                 printf(" ");
  169                 print_redistribute(&area->redist_list);
  170             }
  171         }
  172         if (*area->demote_group)
  173             printf("\tdemote %s %d\n", area->demote_group,
  174             area->demote_level);
  175         LIST_FOREACH(iface, &area->iface_list, entry) {
  176             print_iface(iface);
  177         }
  178         printf("}\n\n");
  179     }
  180 }