]> git.proxmox.com Git - mirror_frr.git/commitdiff
Merge pull request #839 from Orange-OpenSource/TE
authorRuss White <russ@riw.us>
Tue, 1 Aug 2017 11:34:41 +0000 (07:34 -0400)
committerGitHub <noreply@github.com>
Tue, 1 Aug 2017 11:34:41 +0000 (07:34 -0400)
OSPF OPAQUE, TE and RI macro refactoring & cleanup

178 files changed:
COMMUNITY.md
babeld/babel_main.c
babeld/babel_zebra.c
babeld/babeld.c
babeld/babeld.h
bgpd/bgp_aspath.c
bgpd/bgp_attr.c
bgpd/bgp_attr.h
bgpd/bgp_bfd.c
bgpd/bgp_btoa.c
bgpd/bgp_damp.c
bgpd/bgp_dump.c
bgpd/bgp_evpn.c
bgpd/bgp_evpn_vty.c
bgpd/bgp_fsm.c
bgpd/bgp_label.c
bgpd/bgp_main.c
bgpd/bgp_mpath.c
bgpd/bgp_mplsvpn.c
bgpd/bgp_network.c
bgpd/bgp_open.c
bgpd/bgp_packet.c
bgpd/bgp_route.c
bgpd/bgp_route.h
bgpd/bgp_routemap.c
bgpd/bgp_snmp.c
bgpd/bgp_updgrp.c
bgpd/bgp_updgrp.h
bgpd/bgp_updgrp_adv.c
bgpd/bgp_updgrp_packet.c
bgpd/bgp_vpn.c
bgpd/bgp_vty.c
bgpd/bgp_zebra.c
bgpd/bgpd.c
bgpd/bgpd.h
bgpd/rfapi/bgp_rfapi_cfg.c
bgpd/rfapi/bgp_rfapi_cfg.h
bgpd/rfapi/rfapi.c
bgpd/rfapi/rfapi_import.c
bgpd/rfapi/rfapi_monitor.c
bgpd/rfapi/rfapi_private.h
bgpd/rfapi/rfapi_rib.c
bgpd/rfapi/vnc_import_bgp.c
bgpd/rfapi/vnc_zebra.c
doc/Building_FRR_on_CentOS6.md
eigrpd/eigrp_interface.c
eigrpd/eigrp_main.c
eigrpd/eigrp_packet.c
eigrpd/eigrp_routemap.c
eigrpd/eigrp_structs.h
eigrpd/eigrp_update.c
eigrpd/eigrp_vty.c
git-reindent-branch.py [new file with mode: 0644]
isisd/dict.c
isisd/isis_adjacency.c
isisd/isis_circuit.c
isisd/isis_lsp.c
isisd/isis_pdu.c
isisd/isis_pfpacket.c
isisd/isis_redist.c
isisd/isis_spf.c
isisd/isis_tlv.h
isisd/isisd.h
ldpd/.gitignore
ldpd/Makefile.am
ldpd/lde.c
ldpd/ldp_debug.c
ldpd/ldp_vty.h
ldpd/ldp_vty_cmds.c
ldpd/ldp_vty_conf.c
ldpd/ldp_vty_exec.c
lib/checksum.c
lib/command.c
lib/command.h
lib/command_py.c
lib/getopt.c
lib/hash.c
lib/hash.h
lib/hook.h
lib/if.h
lib/imsg-buffer.c
lib/imsg.c
lib/imsg.h
lib/log.c
lib/log.h
lib/md5.c
lib/mpls.h
lib/nexthop.c
lib/openbsd-tree.c
lib/openbsd-tree.h
lib/plist.c
lib/prefix.c
lib/prefix.h
lib/privs.c
lib/routemap.c
lib/sigevent.c
lib/smux.c
lib/sockopt.c
lib/vty.c
lib/zassert.h
lib/zclient.c
ospf6d/ospf6_asbr.c
ospf6d/ospf6_interface.c
ospf6d/ospf6_intra.c
ospf6d/ospf6_lsa.c
ospf6d/ospf6_message.c
ospf6d/ospf6_neighbor.c
ospf6d/ospf6_route.c
ospf6d/ospf6_zebra.c
ospfd/ospf_abr.c
ospfd/ospf_api.c
ospfd/ospf_apiserver.c
ospfd/ospf_flood.c
ospfd/ospf_ia.c
ospfd/ospf_interface.c
ospfd/ospf_lsa.c
ospfd/ospf_main.c
ospfd/ospf_neighbor.c
ospfd/ospf_opaque.c
ospfd/ospf_packet.c
ospfd/ospf_route.c
ospfd/ospf_routemap.c
ospfd/ospf_snmp.c
ospfd/ospf_vty.c
pimd/pim_assert.c
pimd/pim_cmd.c
pimd/pim_iface.h
pimd/pim_ifchannel.c
pimd/pim_main.c
pimd/pim_msdp.c
pimd/pim_msdp.h
pimd/pim_register.c
pimd/pim_rp.c
pimd/pim_zlookup.c
qpb/qpb_allocator.h
redhat/frr.init
ripd/rip_debug.c
ripd/rip_interface.c
ripd/rip_routemap.c
ripd/rip_zebra.c
ripd/ripd.c
ripngd/ripng_debug.c
ripngd/ripng_routemap.c
ripngd/ripng_zebra.c
ripngd/ripngd.c
tests/bgpd/test_aspath.c
tests/bgpd/test_capability.c
tests/bgpd/test_mp_attr.c
tests/bgpd/test_mpath.c
tests/lib/cli/test_commands.c
tests/lib/test_checksum.c
tests/lib/test_privs.c
tests/lib/test_timer_correctness.c
tools/start-stop-daemon.c
vtysh/vtysh.c
vtysh/vtysh.h
zebra/.gitignore
zebra/Makefile.am
zebra/debug.c
zebra/if_ioctl_solaris.c
zebra/interface.c
zebra/interface.h
zebra/kernel_netlink.c
zebra/kernel_socket.c
zebra/main.c
zebra/rtadv.c
zebra/zebra_l2.h
zebra/zebra_mpls.c
zebra/zebra_mpls_vty.c
zebra/zebra_ptm.c
zebra/zebra_rib.c
zebra/zebra_rnh.h
zebra/zebra_routemap.c
zebra/zebra_static.c
zebra/zebra_static.h
zebra/zebra_vty.c
zebra/zebra_vxlan.c
zebra/zserv.c

index 8ab6a624ee978978ee55c2a7d96b6b3ed0855698..bbc5bb6d1050494f677f5630f900baf43d1ee296 100644 (file)
@@ -1,4 +1,7 @@
-# Developing for PROJECT (DRAFT)
+Developing for FRRouting
+=========================
+
+## Table of Contents
 
 [TOC]
 
@@ -14,55 +17,57 @@ it's the document that needs to be updated, not reality.
 
 ## Git Structure
 
-The master Git for PROJECT resides on Github at
-[https://github.com/PROJECT/XXX](https://github.com/PROJECT/XXX)
+The master Git for FRRouting resides on Github at
+[https://github.com/frrouting/frr](https://github.com/FRRouting/frr)
 
 ![git branches continually merging to the left from 3 lanes; float-right](doc/git_branches.svg
 "git branch mechanics")
 
-There is one main branch for development and a release branch for each
-major release.
+There is one main branch for development and a release branch for each major
+release.
 
 New contributions are done against the head of the master branch. The CI
-systems will pick up the Github Pull Requests or the new patch from
-Patchwork, run some basic build and functional tests.
+systems will pick up the Github Pull Requests or the new patch from Patchwork,
+run some basic build and functional tests.
 
-For each major release (1.0, 1.1 etc) a new release branch is created based
-on the master.
+For each major release (1.0, 1.1 etc) a new release branch is created based on
+the master.
 
-There was an attempt to use a "develop" branch automatically maintained by
-the CI system.  This is not currently in active use, though the system is
-operational.  If the "develop" branch is in active use and this paragraph
-is still here, this document obviously wasn't updated.
+There was an attempt to use a "develop" branch automatically maintained by the
+CI system.  This is not currently in active use, though the system is
+operational.  If the "develop" branch is in active use and this paragraph is
+still here, this document obviously wasn't updated.
 
 
 ## Programming language, Tools and Libraries
 
-The core of PROJECT is written in C (gcc or clang supported). A few
-non-essential scripts are implemented in Perl and Python. PROJECT requires
-the following tools to build distribution packages: automake, autoconf,
-texinfo, libtool and gawk and various libraries (i.e. libpam and libjson-c).
+The core of FRRouting is written in C (gcc or clang supported) and makes use of
+GNU compiler extensions. A few non-essential scripts are implemented in Perl
+and Python. FRRouting requires the following tools to build distribution
+packages: automake, autoconf, texinfo, libtool and gawk and various libraries
+(i.e. libpam and libjson-c).
 
 If your contribution requires a new library or other tool, then please
-highlight this in your description of the change. Also make sure it’s
-supported by all PROJECT platform OSes or provide a way to build without the
-library (potentially without the new feature) on the other platforms.
+highlight this in your description of the change. Also make sure it’s supported
+by all FRRouting platform OSes or provide a way to build without the library
+(potentially without the new feature) on the other platforms.
 
-Documentation should be written in Tex (.texi) or Markdown (.md) format with
-preference on Markdown.
+Documentation should be written in Tex (.texi) or Markdown (.md) format with a
+preference for Markdown.
 
 
-## Before Submitting your changes
+## Mailing lists
+
+Italicized lists are private.
+
+| Topic                          | List                         |
+|--------------------------------|------------------------------|
+| Development                    | dev@lists.frrouting.org      |
+| Users & Operators              | frog@lists.frrouting.org     |
+| Announcements                  | announce@lists.frrouting.org |
+| _Security_                     | security@lists.frrouting.org |
+| _Technical Steering Committee_ | tsc@lists.frrouting.org      |
 
-* Format code (see [Code Styling requirements](#code-styling-requirements))
-* Verify and acknowledge license (see [License for contributions](#license-for-contributions))
-* Test building with various configurations:
-    * `buildtest.sh`
-* Verify building source distribution:
-    * `make dist` (and try rebuilding from the resulting tar file)
-* Run DejaGNU unit tests:
-    * `make test`
-* Document Regression Runs and plans for continued maintenance of the feature
 
 ### Changelog
 
@@ -75,16 +80,45 @@ for the release notes.
 
 ## Submitting Patches and Enhancements
 
+### Pre-submission Checklist
+
+* Format code (see [Coding style requirements](#coding-style-requirements))
+* Verify and acknowledge license (see [License for contributions](#license-for-contributions))
+* Ensure you have properly signed off (see [Signing Off](#signing-off))
+* Test building with various configurations:
+    * `buildtest.sh`
+* Verify building source distribution:
+    * `make dist` (and try rebuilding from the resulting tar file)
+* Run unit tests:
+    * `make test`
+* Document Regression Runs and plans for continued maintenance of the feature
+
 ### License for contributions
 
-PROJECT is under a “GPLv2 or later” license. Any code submitted must be
+FRRouting is under a “GPLv2 or later” license. Any code submitted must be
 released under the same license (preferred) or any license which allows
 redistribution under this GPLv2 license (eg MIT License).
 
-### Signed-off required
+### Signing Off
 
-Submissions to PROJECT require a “Signed-off” in the patch or git commit.
-We follow the same standard as the Linux Kernel Development.
+Code submitted to FRRouting must be signed off. We have the same requirements
+for using the signed-off-by process as the Linux kernel. In short, you must
+include a signed-off-by tag in every patch.
+
+`Signed-off-by:` this is a developer's certification that he or she has the
+right to submit the patch for inclusion into the project. It is an agreement to
+the Developer's Certificate of Origin (below). Code without a proper signoff
+can not and will not be merged.
+
+If you are unfamiliar with this process, you should read the [official policy
+at kernel.org](http://www.kernel.org/doc/Documentation/SubmittingPatches) and
+you might find this article about [participating in the Linux community on the
+Linux Foundation
+website](http://www.linuxfoundation.org/content/how-participate-linux-community-0)
+to be a helpful resource.
+
+In short, when you sign off on a commit, you assert your agreement to all of
+the following:
 
 > Developer's Certificate of Origin 1.1
 >
@@ -112,79 +146,46 @@ We follow the same standard as the Linux Kernel Development.
 >     maintained indefinitely and may be redistributed consistent with
 >     this project or the open source license(s) involved.
 
-#### Using this Process
-
-We have the same requirements for using the signed-off-by process as the Linux
-kernel. In short, you need to include a signed-off-by tag in every patch:
-
-* `Signed-off-by:` this is a developer's certification that he or she has the
-right to submit the patch for inclusion into the project. It is an agreement to
-the Developer's Certificate of Origin (above). Code without a proper signoff
-cannot be merged into the mainline.
-
-Please make sure to have a `Signed-off-by:` in each commit/patch or the patches
-will be rejected until this is added.
-
-If you are unfamiliar with this process, you should read the [official policy
-at kernel.org](http://www.kernel.org/doc/Documentation/SubmittingPatches) and
-you might find this article about [participating in the Linux community on the
-Linux Foundation
-website](http://www.linuxfoundation.org/content/how-participate-linux-community-0)
-to be a helpful resource.
-
-### Code submission - What do I submit my changes against?
+### What do I submit my changes against?
 
 We've documented where we would like to have the different fixes applied at
 https://github.com/FRRouting/frr/wiki/Where-Do-I-create-a-Pull-Request-against%3F
-If you are unsure where your submission goes, look at that document or ask
-the question of a maintainer.
+If you are unsure where your submission goes, look at that document or ask a
+project maintainer.
 
-### Code submission - Github Pull Request (Strongly Preferred)
+### Github pull requests
 
-Preferred submission of code is by using a Github Pull Request against the
-Develop branch. Code submitted by Pull Request will have an email generated to
-the PROJECT-devel mailing list for review and the submission will be
-automatically tested by one or more CI systems. Only after this test succeeds
-(and the submission is based on the head of the develop branch), then it will
-be automatically merged into the develop branch. In case of failed tests, it is
-up to the submitter to either amend the request with further commits or close,
-fix and create a new pull request.
+The preferred method of submitting changes is a Github pull request. Code
+submitted by pull request will be automatically tested by one or more CI
+systems. Once the automated tests succeed, other developers will review your
+code for quality and correctness. After any concerns are resolved, your code
+will be merged into the branch it was submitted against.
 
-Further (manual) code review and discussion happens after the merge into the
-develop branch.
+### Patch submission via mailing list
 
-
-### Code submission - Mailing Patch to PROJECT-Devel list
-
-As an alternative submission, a patch can be mailed to the PROJECT-Devel
-mailing list. Preferred way to send the patch is using git send-mail. Patches
-received on the mailing list will be picked up by Patchwork and tested against
-the latest develop branch. After a further ACK by someone on the mailing list,
-the patch is then merged into the develop branch.
-
-Further (manual) code review and discussion happens after the merge into the
-develop branch.
-
-#### Sending patch to mailing list
+As an alternative submission method, a patch can be mailed to the development
+mailing list. Patches received on the mailing list will be picked up by
+Patchwork and tested against the latest development branch.
 
 The recommended way to send the patch (or series of NN patches) to the list is
-by using ‘git send-email’ as follows (assuming they are the most recent NN
+by using `git send-email` as follows (assuming they are the N most recent
 commit(s) in your git history:
 
 ```
-git send-email -NN --annotate --to=XXX-Devel@XXX.org
+git send-email -NN --annotate --to=dev@lists.frrouting.org
 ```
 
 If your commits do not already contain a `Signed-off-by` line, then use the
-following version to add it (after making sure to be able to agree to the
-Developer Certificate of Origin as outlined above):
+following command to add it (after making sure you agree to the Developer
+Certificate of Origin as outlined above):
 
 ```
-git send-email -NN --annotate --signoff --to=XXX-Devel@XXX.org
+git send-email -NN --annotate --signoff --to=dev@lists.frrouting.org
 ```
 
-Submitting multi-commit patches as a Github Pull Request is strongly encouraged
-and will allow your changes to merge faster
+Submitting multi-commit patches as a Github pull request is **strongly
+encouraged** and increases the probability of your patch getting reviewed and
+merged in a timely manner.
 
 
 ## After submitting your changes
@@ -194,35 +195,34 @@ and will allow your changes to merge faster
       less than 2 hrs of the submission. If you don’t get the email, then check
       status on the github pull request (if submitted by pull request) or on
       Patchwork at
-      [https://patchwork.PROJECT.org](https://patchwork.PROJECT.org) (if
+      [https://patchwork.frrouting.org](https://patchwork.frrouting.org) (if
       submitted as patch to mailing list).
-    * Please notify PROJECT-Devel mailing list if you think something doesn’t
-      work
+    * Please notify the development mailing list if you think something doesn’t
+      work.
 * If the tests failed:
     * In general, expect the community to ignore the submission until the tests
       pass.
     * It is up to you to fix and resubmit.
-        * This includes fixing existing dejagnu (“make test”) tests if your
+        * This includes fixing existing unit (“make test”) tests if your
           changes broke or changed them.
         * It also includes fixing distribution packages for the failing
-          platforms (ie if new libraries are required)
-        * Feel free to ask for help on PROJECT-Devel list
+          platforms (ie if new libraries are required).
+        * Feel free to ask for help on the development list.
     * Go back to the submission process and repeat until the tests pass.
 * If the tests pass:
-    * If the changes are done as a pull request, then they should be
-      automatically merged to the develop branch.
-    * Changes sent to mailing list require a manual ACK to be merged and should
-      be merged within 2 weeks. If you don’t see the merge or any
-      reason/discussion on PROJECT-Devel, then please ask.
+    * Wait for reviewers. Someone will review your code or be assigned to
+      review your code.
+    * Respond to any comments or concerns the reviewer has.
+    * After all comments and concerns are addressed, expect your patch to be
+      merged.
 * Watch out for questions on the mailing list. At this time there will be a
   manual code review and further (longer) tests by various community members.
-* Your submission is done once it is merged to the master branch. (which should
-  happen every few weeks from the develop branch)
+* Your submission is done once it is merged to the master branch.
 
 
-## Code Styling requirements
+## Developer's Guidelines
 
-### File header required for new files added
+### Source file header
 
 New files need to have a Copyright header (see [License for
 contributions](#license-for-contributions) above) added to the file. Preferred
@@ -251,7 +251,7 @@ form of the header is as follows:
 #include <zebra.h>
 ```
 
-### Adding Copyright claims to already existing file
+### Adding copyright claims to existing files
 
 When adding copyright claims for modifications to an existing file, please
 preface the claim with "Portions: " on a line before it and indent the
@@ -264,95 +264,147 @@ Portions:
   Copyright (C) 2016 Your name [optional brief change description]
 ```
 
-### Code styling / format
+### Code formatting
 
-Coding style standards in FRR vary depending on location.  Pre-existing
-code uses GNU coding standards.  New code may use Linux kernel coding style.
+FRR uses Linux kernel style except where noted below. Code which does not
+comply with these style guidelines will not be accepted.
 
-GNU coding style apply to the following parts:
+To assist with compliance, in the project root there is a .clang-format
+configuration file which can be used with the `clang-format` tool from the LLVM
+project. In the `tools/` directory there is a Python script named `indent.py`
+that wraps clang-format and handles some edge cases specific to FRR. If you are
+submitting a new file, it is recommended to run that script over the new file
+after ensuring that the latest stable release of `clang-format` is in your
+PATH.
 
-* lib/
-* zebra/
-* bgpd/
-* ospfd/
-* ospf6d/
-* isisd/
-* ripd/
-* ripngd/
-* vtysh/
+**Whitespace changes in untouched parts of the code are not acceptable in
+patches that change actual code.**  To change/fix formatting issues, please
+create a separate patch that only does formatting changes and nothing else.
 
-Linux kernel coding style applies to:
+#### Style documentation
+Kernel and BSD styles are documented externally:
 
-* nhrpd/
-* watchfrr/
-* pimd/
-* lib/{checksum,hook,imsg-buffer,imsg,libfrr,md5,module,monotime,queue}.[ch]
+* [https://www.kernel.org/doc/html/latest/process/coding-style.html](https://www.kernel.org/doc/html/latest/process/coding-style.html)
+* [http://man.openbsd.org/style](http://man.openbsd.org/style)
+
+For GNU coding style, use `indent` with the following invocation:
+
+```
+indent -nut -nfc1 file_for_submission.c
+```
+
+#### Exceptions
+
+FRR project code comes from a variety of sources, so there are some stylistic
+exceptions in place. They are organized here by branch.
+
+**For `master`:**
 
 BSD coding style applies to:
 
-* ldpd/
+* `ldpd/`
 
-**Whitespace changes in untouched parts of the code are not acceptable in
-patches that change actual code.**  To change/fix formatting issues, please
-create a separate patch that only does formatting changes and nothing else.
+`babeld` uses, approximately, the following style:
 
-It is acceptable to rewrap entire files to Linux kernel style, but this
-**MUST** come as a separate patch that does nothing other than this
-reformatting.
+* K&R style braces
+* Indents are 4 spaces
+* Function return types are on their own line
 
 
-#### GNU style
+**For `stable/3.0` and `stable/2.0`:**
 
-For GNU coding style, Indentation follows the result of invoking GNU indent:
+GNU coding style apply to the following parts:
 
-```
-indent -nut -nfc1 file_for_submission.c
-```
+* `lib/`
+* `zebra/`
+* `bgpd/`
+* `ospfd/`
+* `ospf6d/`
+* `isisd/`
+* `ripd/`
+* `ripngd/`
+* `vtysh/`
 
-Originally, tabs were used instead of spaces, with tabs are every 8 columns.
-However, tab interoperability issues mean space characters are now preferred for
-new changes. We generally only clean up whitespace when code is unmaintainable
-due to whitespace issues, to minimise merging conflicts.
+BSD coding style applies to:
 
+* `ldpd/`
 
-#### Linux kernel & BSD style
 
-These styles are documented externally:
+### Documentation
 
-* [https://www.kernel.org/doc/Documentation/CodingStyle](https://www.kernel.org/doc/Documentation/CodingStyle).
-* [http://man.openbsd.org/style](http://man.openbsd.org/style)
+FRRouting is a large and complex software project developed by many different
+people over a long period of time. Without adequate documentation, it can be
+exceedingly difficult to understand code segments, APIs and other interfaces.
+In the interest of keeping the project healthy and maintainable, you should
+make every effort to document your code so that other people can understand
+what it does without needing to closely read the code itself.
+
+Some specific guidelines that contributors should follow are:
+
+* Functions exposed in header files should have descriptive comments above
+  their signatures in the header file. At a minimum, a function comment should
+  contain information about the return value, parameters, and a general summary
+  of the function's purpose. Documentation on parameter values can be omitted
+  if it is (very) obvious what they are used for.
+
+  Function comments must follow the style for multiline comments laid out in
+  the kernel style guide.
+
+Example:
+
+```
+/*
+ * Determines whether or not a string is cool.
+ *
+ * @param text - the string to check for coolness
+ * @param is_clccfc - whether capslock is cruise control for cool
+ * @return 7 if the text is cool, 0 otherwise
+ */
+int check_coolness(const char *text, bool is_clccfc);
+```
 
-They are relatively similar but differ in details.
+The Javadoc-style annotations are not required, but you should still strive to
+make it equally clear what parameters and return values are used for.
 
-pimd deviates from Linux kernel style in using 2 spaces for indentation, with
-Tabs replacing 8 spaces, as well as adding a line break between `}` and `else`.
-It is acceptable to convert indentation in pimd/ to Linux kernel style, but
-please convert an entire file at a time.  (Rationale: apart from 2-space
-indentation, the styles are sufficiently close to not upset when mixed.)
+* Static functions should have descriptive comments in the same form as above
+  if what they do is not immediately obvious. Use good engineering judgement
+  when deciding whether a comment is necessary. If you are unsure, document
+  your code.
 
-Unlike GNU style, these styles use tabs, not spaces.
+* Global variables, static or not, should have a comment describing their use.
 
+* **For new code in `lib/`, these guidelines are hard requirements.**
 
-### Compile-Time conditional code
 
-Many users access PROJECT via binary packages from 3rd party sources;
-compile-time code puts inclusion/exclusion in the hands of the package
-maintainer.  Please think very carefully before making code conditional at
-compile time, as it increases regression testing, maintenance burdens, and user
-confusion. In particular, please avoid gratuitous --enable-… switches to the
-configure script - typically code should be good enough to be in PROJECT, or it
-shouldn’t be there at all.
+If you are contributing code that adds significant user-visible functionality
+or introduces a new API, please document it in `doc/`.  Markdown and LaTeX are
+acceptable formats, although Markdown is currently preferred for new
+documentation. This may change in the near future.
+
+Finally, if you come across some code that is undocumented and feel like going
+above and beyond, document it! We absolutely appreciate and accept patches that
+document previously undocumented code.
+
+### Compile-time conditional code
+
+Many users access FRR via binary packages from 3rd party sources; compile-time
+code puts inclusion/exclusion in the hands of the package maintainer.  Please
+think very carefully before making code conditional at compile time, as it
+increases regression testing, maintenance burdens, and user confusion. In
+particular, please avoid gratuitous `--enable-…` switches to the configure
+script - in general, code should be of high quality and in working condition,
+or it shouldn’t be in FRR at all.
 
 When code must be compile-time conditional, try have the compiler make it
-conditional rather than the C pre-processor - so that it will still be checked
-by the compiler, even if disabled. I.e. this:
+conditional rather than the C pre-processor so that it will still be checked by
+the compiler, even if disabled. For example,
 
 ```
 if (SOME_SYMBOL)
       frobnicate();
 ```
 
-rather than
+is preferred to
 
 ```
 #ifdef SOME_SYMBOL
@@ -363,53 +415,55 @@ frobnicate ();
 Note that the former approach requires ensuring that `SOME_SYMBOL` will be
 defined (watch your `AC_DEFINE`s).
 
-### Debug-Guards in code
+### Debug-guards in code
 
-Debugs are an important methodology to allow developers to fix issues
-found in the code after it has been released.  The caveat here is
-that the developer must remember that people will be using the code
-at scale and in ways that can be unexpected for the original implementor.
-As such debugs MUST be guarded in such a way that they can be turned off.
-This PROJECT has the ability to turn on/off debugs from the CLI and it is
-expected that the developer will use this convention to allow control
-of their debugs.
+Debugging statements are an important methodology to allow developers to fix
+issues found in the code after it has been released.  The caveat here is that
+the developer must remember that people will be using the code at scale and in
+ways that can be unexpected for the original implementor.  As such debugs
+**MUST** be guarded in such a way that they can be turned off.  FRR has the
+ability to turn on/off debugs from the CLI and it is expected that the
+developer will use this convention to allow control of their debugs.
 
-### CLI-Changes
+### CLI changes
 
-CLI's are a complicated ugly beast.  Additions or changes to the CLI
-should use a DEFUN to encapsulate one setting as much as is possible.
-Additionally as new DEFUN's are added to the system, documentation
-should be provided for the new commands.
+CLI's are a complicated ugly beast.  Additions or changes to the CLI should use
+a DEFUN to encapsulate one setting as much as is possible.  Additionally as new
+DEFUN's are added to the system, documentation should be provided for the new
+commands.
 
 ### Backwards Compatibility
 
-As a general principle, changes to CLI and code in the lib/ directory
-should be made in a backwards compatible fashion. This means that
-changes that are purely stylistic in nature should be avoided, e.g.,
-renaming an existing macro or library function name without any
-functional change. When adding new parameters to common functions, it is
-also good to consider if this too should be done in a backward
-compatible fashion, e.g., by preserving the old form in addition to
+As a general principle, changes to CLI and code in the lib/ directory should be
+made in a backwards compatible fashion. This means that changes that are purely
+stylistic in nature should be avoided, e.g., renaming an existing macro or
+library function name without any functional change. When adding new parameters
+to common functions, it is also good to consider if this too should be done in
+a backward compatible fashion, e.g., by preserving the old form in addition to
 adding the new form.
 
-This is not to say that minor or even major functional changes to CLI
-and common code should be avoided, but rather that the benefit gained
-from a change should be weighed against the added cost/complexity to
-existing code.  Also, that when making such changes, it is good to
-preserve compatibility when possible to do so without introducing
-maintenance overhead/cost.  It is also important to keep in mind,
-existing code includes code that may reside in private repositories (and
-is yet to be submitted) or code that has yet to be migrated from Quagga
-to FRR.
+This is not to say that minor or even major functional changes to CLI and
+common code should be avoided, but rather that the benefit gained from a change
+should be weighed against the added cost/complexity to existing code.  Also,
+that when making such changes, it is good to preserve compatibility when
+possible to do so without introducing maintenance overhead/cost.  It is also
+important to keep in mind, existing code includes code that may reside in
+private repositories (and is yet to be submitted) or code that has yet to be
+migrated from Quagga to FRR.
 
 That said, compatibility measures can (and should) be removed when either:
 
-* they become a significant burden, e.g. when data structures change and
-  the compatibility measure would need a complex adaptation layer or becomes
+* they become a significant burden, e.g. when data structures change and the
+  compatibility measure would need a complex adaptation layer or becomes
   flat-out impossible
-* some measure of time (dependent on the specific case) has passed, so that
-  the compatibility grace period is considered expired.
+* some measure of time (dependent on the specific case) has passed, so that the
+  compatibility grace period is considered expired.
 
 In all cases, compatibility pieces should be marked with compiler/preprocessor
 annotations to print warnings at compile time, pointing to the appropriate
 update path.  A `-Werror` build should fail if compatibility bits are used.
+
+### Miscellaneous
+
+When in doubt, follow the guidelines in the Linux kernel style guide, or ask on
+the development mailing list / public Slack instance.
index 517489f15f40b67bc3ea7b8411269367a6cb5db1..54626a4aeb5904c10b89f7ed6d9aa3851e956ebf 100644 (file)
@@ -207,8 +207,6 @@ main(int argc, char **argv)
 
     schedule_neighbours_check(5000, 1);
 
-    zlog_notice ("BABELd %s starting: vty@%d", BABEL_VERSION, babel_vty_port);
-
     frr_config_fork();
     frr_run(master);
 
index 52d7eaee83cd7c4ba30670a5b1b77738fceed246..11b9c5956c24cb1666bc3ac990e544e037028403 100644 (file)
@@ -55,25 +55,6 @@ static struct {
     {0, 0, NULL}
 };
 
-static struct {
-    int str_min_len;
-    const char *str;
-} proto_redistnum_type[ZEBRA_ROUTE_MAX] = {
-    [ZEBRA_ROUTE_BABEL]   = {2, "babel"},
-    [ZEBRA_ROUTE_BGP]     = {2, "bgp"},
-    [ZEBRA_ROUTE_CONNECT] = {1, "connected"},
-    [ZEBRA_ROUTE_HSLS]    = {1, "hsls"},
-    [ZEBRA_ROUTE_ISIS]    = {1, "isis"},
-    [ZEBRA_ROUTE_KERNEL]  = {1, "kernel"},
-    [ZEBRA_ROUTE_OLSR]    = {2, "olsr"},
-    [ZEBRA_ROUTE_OSPF]    = {2, "ospf"},
-    [ZEBRA_ROUTE_OSPF6]   = {5, "ospf6"},
-    [ZEBRA_ROUTE_RIP]     = {1, "rip"},
-    [ZEBRA_ROUTE_RIPNG]   = {4, "ripng"},
-    [ZEBRA_ROUTE_STATIC]  = {2, "static"},
-    [ZEBRA_ROUTE_SYSTEM]  = {2, "system"},
-};
-
 /* Zebra node structure. */
 struct cmd_node zebra_node =
 {
@@ -191,66 +172,46 @@ babel_zebra_read_ipv4 (int command, struct zclient *zclient,
     return 0;
 }
 
-static int
-babel_proto_redistnum(const char *s)
-{
-    int i;
-    if (! s)
-        return -1;
-    int len = strlen(s);
-
-    for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
-        if (len <= (int)strlen(proto_redistnum_type[i].str) &&
-            strncmp(proto_redistnum_type[i].str, s,
-                    proto_redistnum_type[i].str_min_len) == 0) {
-            return i;
-        }
-    }
-
-    return -1;
-}
-
 /* [Babel Command] */
 DEFUN (babel_redistribute_type,
        babel_redistribute_type_cmd,
-       "redistribute " FRR_REDIST_STR_BABELD,
+       "[no] redistribute <ipv4 " FRR_IP_REDIST_STR_BABELD "|ipv6 " FRR_IP6_REDIST_STR_BABELD ">",
+       NO_STR
        "Redistribute\n"
-       FRR_REDIST_HELP_STR_BABELD)
+       "Redistribute IPv4 routes\n"
+       FRR_IP_REDIST_HELP_STR_BABELD
+       "Redistribute IPv6 routes\n"
+       FRR_IP6_REDIST_HELP_STR_BABELD)
 {
+    int negate = 0;
+    int family;
+    int afi;
     int type;
+    int idx = 0;
 
-    type = babel_proto_redistnum(argv[1]->arg);
-
-    if (type < 0) {
-        vty_out (vty, "Invalid type %s\n", argv[1]->arg);
+    if (argv_find(argv, argc, "no", &idx))
+        negate = 1;
+    argv_find(argv, argc, "redistribute", &idx);
+    family = str2family(argv[idx + 1]->text);
+    if (family < 0)
         return CMD_WARNING_CONFIG_FAILED;
-    }
-
-    zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, type, 0, VRF_DEFAULT);
-    zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0, VRF_DEFAULT);
-    return CMD_SUCCESS;
-}
-
-/* [Babel Command] */
-DEFUN (no_babel_redistribute_type,
-       no_babel_redistribute_type_cmd,
-       "no redistribute " FRR_REDIST_STR_BABELD,
-       NO_STR
-       "Redistribute\n"
-       FRR_REDIST_HELP_STR_BABELD)
-{
-    int type;
 
-    type = babel_proto_redistnum(argv[2]->arg);
+    afi = family2afi(family);
+    if (!afi)
+        return CMD_WARNING_CONFIG_FAILED;
 
+    type = proto_redistnum(afi, argv[idx + 2]->text);
     if (type < 0) {
-        vty_out (vty, "Invalid type %s\n", argv[2]->arg);
+        vty_out (vty, "Invalid type %s\n", argv[idx + 2]->arg);
         return CMD_WARNING_CONFIG_FAILED;
     }
 
-    zclient_redistribute (ZEBRA_REDISTRIBUTE_DELETE, zclient, AFI_IP, type, 0, VRF_DEFAULT);
-    zclient_redistribute (ZEBRA_REDISTRIBUTE_DELETE, zclient, AFI_IP6, type, 0, VRF_DEFAULT);
-    /* perhaps should we remove xroutes having the same type... */
+    if (!negate)
+        zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, afi, type, 0, VRF_DEFAULT);
+    else {
+        zclient_redistribute (ZEBRA_REDISTRIBUTE_DELETE, zclient, afi, type, 0, VRF_DEFAULT);
+        /* perhaps should we remove xroutes having the same type... */
+    }
     return CMD_SUCCESS;
 }
 
@@ -374,7 +335,6 @@ void babelz_zebra_init(void)
 
     install_node (&zebra_node, zebra_config_write);
     install_element(BABEL_NODE, &babel_redistribute_type_cmd);
-    install_element(BABEL_NODE, &no_babel_redistribute_type_cmd);
     install_element(ENABLE_NODE, &debug_babel_cmd);
     install_element(ENABLE_NODE, &no_debug_babel_cmd);
     install_element(CONFIG_NODE, &debug_babel_cmd);
index b2f8176aabeb341bd5b8ca7acf41a978efb8c172..f995745e415c873a1e2a513f9e6ee214b05eb88f 100644 (file)
@@ -76,6 +76,7 @@ static int
 babel_config_write (struct vty *vty)
 {
     int lines = 0;
+    int afi;
     int i;
 
     /* list enabled debug modes */
@@ -108,13 +109,17 @@ babel_config_write (struct vty *vty)
     /* list enabled interfaces */
     lines = 1 + babel_enable_if_config_write (vty);
     /* list redistributed protocols */
-    for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
-        if (i != zclient->redist_default &&
-           vrf_bitmap_check (zclient->redist[AFI_IP][i], VRF_DEFAULT))
-        {
-            vty_out (vty, " redistribute %s\n", zebra_route_string(i));
-            lines++;
+    for (afi = AFI_IP; afi <= AFI_IP6; afi++) {
+        for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+            if (i != zclient->redist_default &&
+                vrf_bitmap_check (zclient->redist[afi][i], VRF_DEFAULT)) {
+                vty_out (vty, " redistribute %s %s\n",
+                         (afi == AFI_IP) ? "ipv4" : "ipv6",
+                         zebra_route_string(i));
+                lines++;
+            }
         }
+    }
 
     lines += config_write_distribute (vty);
 
index d933f1880554ee8bbf6d1888d7f471693d256f73..899b4f175c46cca29449a8ff4e21ce67ec39fc53 100644 (file)
@@ -90,7 +90,6 @@ THE SOFTWARE.
 
 #define BABEL_VTY_PORT 2609
 #define BABEL_DEFAULT_CONFIG "babeld.conf"
-#define BABEL_VERSION "0.1 for quagga"
 
 /* Values in milliseconds */
 #define BABEL_DEFAULT_HELLO_INTERVAL 4000
index 1e68c7d53b00873bf2f257b350abc7c8299d9dfa..4e55c5f264ae7bddcda2e9c139f56cc78e74a053 100644 (file)
@@ -878,9 +878,8 @@ size_t aspath_put(struct stream *s, struct aspath *as, int use32bit)
                 * The general assumption here is that many things tested will
                 * never happen.  And, in real live, up to now, they have not.
                 */
-               while (seg
-                      && (ASSEGMENT_LEN(seg, use32bit)
-                          <= STREAM_WRITEABLE(s))) {
+               while (seg && (ASSEGMENT_LEN(seg, use32bit)
+                              <= STREAM_WRITEABLE(s))) {
                        struct assegment *next = seg->next;
                        int written = 0;
                        int asns_packed = 0;
@@ -1585,14 +1584,12 @@ int aspath_cmp_left(const struct aspath *aspath1, const struct aspath *aspath2)
                return 1;
 
        /* find first non-confed segments for each */
-       while (seg1
-              && ((seg1->type == AS_CONFED_SEQUENCE)
-                  || (seg1->type == AS_CONFED_SET)))
+       while (seg1 && ((seg1->type == AS_CONFED_SEQUENCE)
+                       || (seg1->type == AS_CONFED_SET)))
                seg1 = seg1->next;
 
-       while (seg2
-              && ((seg2->type == AS_CONFED_SEQUENCE)
-                  || (seg2->type == AS_CONFED_SET)))
+       while (seg2 && ((seg2->type == AS_CONFED_SEQUENCE)
+                       || (seg2->type == AS_CONFED_SET)))
                seg2 = seg2->next;
 
        /* Check as1's */
@@ -2069,8 +2066,7 @@ static void aspath_show_all_iterator(struct hash_backet *backet,
    `show [ip] bgp paths' command. */
 void aspath_print_all_vty(struct vty *vty)
 {
-       hash_iterate(ashash,
-                    (void (*)(struct hash_backet *,
-                              void *))aspath_show_all_iterator,
+       hash_iterate(ashash, (void (*)(struct hash_backet *,
+                                      void *))aspath_show_all_iterator,
                     vty);
 }
index 508deb1d3427f9ca334ee618929f9ef11681f07c..ef32b9cf923c0b32190bd72dbf7c53920304f459 100644 (file)
@@ -82,14 +82,15 @@ static const struct message attr_str[] = {
        {BGP_ATTR_PREFIX_SID, "PREFIX_SID"},
        {0}};
 
-static const struct message attr_flag_str[] = {
-       {BGP_ATTR_FLAG_OPTIONAL, "Optional"},
-       {BGP_ATTR_FLAG_TRANS, "Transitive"},
-       {BGP_ATTR_FLAG_PARTIAL, "Partial"},
-       /* bgp_attr_flags_diagnose() relies on this bit being last in
-          this list */
-       {BGP_ATTR_FLAG_EXTLEN, "Extended Length"},
-       {0}};
+static const struct message attr_flag_str[] =
+       {
+               {BGP_ATTR_FLAG_OPTIONAL, "Optional"},
+               {BGP_ATTR_FLAG_TRANS, "Transitive"},
+               {BGP_ATTR_FLAG_PARTIAL, "Partial"},
+               /* bgp_attr_flags_diagnose() relies on this bit being last in
+                  this list */
+               {BGP_ATTR_FLAG_EXTLEN, "Extended Length"},
+               {0}};
 
 static struct hash *cluster_hash;
 
@@ -679,10 +680,9 @@ static void attr_show_all_iterator(struct hash_backet *backet, struct vty *vty)
 
 void attr_show_all(struct vty *vty)
 {
-       hash_iterate(
-               attrhash,
-               (void (*)(struct hash_backet *, void *))attr_show_all_iterator,
-               vty);
+       hash_iterate(attrhash, (void (*)(struct hash_backet *,
+                                        void *))attr_show_all_iterator,
+                    vty);
 }
 
 static void *bgp_attr_hash_alloc(void *p)
@@ -1055,7 +1055,7 @@ bgp_attr_malformed(struct bgp_attr_parser_args *args, u_char subcode,
 static void
 bgp_attr_flags_diagnose(struct bgp_attr_parser_args *args,
                        u_int8_t desired_flags /* how RFC says it must be */
-)
+                       )
 {
        u_char seen = 0, i;
        u_char real_flags = args->flags;
@@ -1087,26 +1087,30 @@ bgp_attr_flags_diagnose(struct bgp_attr_parser_args *args,
  * as will PARTIAL for optional+transitive attributes.
  */
 const u_int8_t attr_flags_values[] = {
-       [BGP_ATTR_ORIGIN] = BGP_ATTR_FLAG_TRANS,
-       [BGP_ATTR_AS_PATH] = BGP_ATTR_FLAG_TRANS,
-       [BGP_ATTR_NEXT_HOP] = BGP_ATTR_FLAG_TRANS,
-       [BGP_ATTR_MULTI_EXIT_DISC] = BGP_ATTR_FLAG_OPTIONAL,
-       [BGP_ATTR_LOCAL_PREF] = BGP_ATTR_FLAG_TRANS,
-       [BGP_ATTR_ATOMIC_AGGREGATE] = BGP_ATTR_FLAG_TRANS,
-       [BGP_ATTR_AGGREGATOR] = BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
-       [BGP_ATTR_COMMUNITIES] = BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
-       [BGP_ATTR_ORIGINATOR_ID] = BGP_ATTR_FLAG_OPTIONAL,
-       [BGP_ATTR_CLUSTER_LIST] = BGP_ATTR_FLAG_OPTIONAL,
-       [BGP_ATTR_MP_REACH_NLRI] = BGP_ATTR_FLAG_OPTIONAL,
-       [BGP_ATTR_MP_UNREACH_NLRI] = BGP_ATTR_FLAG_OPTIONAL,
-       [BGP_ATTR_EXT_COMMUNITIES] =
-               BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
-       [BGP_ATTR_AS4_PATH] = BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
-       [BGP_ATTR_AS4_AGGREGATOR] =
-               BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
-       [BGP_ATTR_LARGE_COMMUNITIES] =
-               BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
-       [BGP_ATTR_PREFIX_SID] = BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
+               [BGP_ATTR_ORIGIN] = BGP_ATTR_FLAG_TRANS,
+               [BGP_ATTR_AS_PATH] = BGP_ATTR_FLAG_TRANS,
+               [BGP_ATTR_NEXT_HOP] = BGP_ATTR_FLAG_TRANS,
+               [BGP_ATTR_MULTI_EXIT_DISC] = BGP_ATTR_FLAG_OPTIONAL,
+               [BGP_ATTR_LOCAL_PREF] = BGP_ATTR_FLAG_TRANS,
+               [BGP_ATTR_ATOMIC_AGGREGATE] = BGP_ATTR_FLAG_TRANS,
+               [BGP_ATTR_AGGREGATOR] =
+                       BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
+               [BGP_ATTR_COMMUNITIES] =
+                       BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
+               [BGP_ATTR_ORIGINATOR_ID] = BGP_ATTR_FLAG_OPTIONAL,
+               [BGP_ATTR_CLUSTER_LIST] = BGP_ATTR_FLAG_OPTIONAL,
+               [BGP_ATTR_MP_REACH_NLRI] = BGP_ATTR_FLAG_OPTIONAL,
+               [BGP_ATTR_MP_UNREACH_NLRI] = BGP_ATTR_FLAG_OPTIONAL,
+               [BGP_ATTR_EXT_COMMUNITIES] =
+                       BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
+               [BGP_ATTR_AS4_PATH] =
+                       BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
+               [BGP_ATTR_AS4_AGGREGATOR] =
+                       BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
+               [BGP_ATTR_LARGE_COMMUNITIES] =
+                       BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
+               [BGP_ATTR_PREFIX_SID] =
+                       BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
 };
 static const size_t attr_flags_values_max = array_size(attr_flags_values) - 1;
 
@@ -2035,7 +2039,7 @@ static int bgp_attr_encap(uint8_t type, struct peer *peer, /* IN */
                        }
 #endif
                }
-               stlv_last->next = tlv;
+               stlv_last = tlv;
        }
 
        if (BGP_ATTR_ENCAP == type) {
@@ -2751,10 +2755,9 @@ static void bgp_packet_mpattr_tea(struct bgp *bgp, struct peer *peer,
        struct bgp_attr_encap_subtlv *st;
        const char *attrname;
 
-       if (!attr
-           || (attrtype == BGP_ATTR_ENCAP
-               && (!attr->encap_tunneltype
-                   || attr->encap_tunneltype == BGP_ENCAP_TYPE_MPLS)))
+       if (!attr || (attrtype == BGP_ATTR_ENCAP
+                     && (!attr->encap_tunneltype
+                         || attr->encap_tunneltype == BGP_ENCAP_TYPE_MPLS)))
                return;
 
        switch (attrtype) {
@@ -2801,8 +2804,9 @@ static void bgp_packet_mpattr_tea(struct bgp *bgp, struct peer *peer,
 
        if (attrlenfield > 0xff) {
                /* 2-octet length field */
-               stream_putc(s, BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL
-                                      | BGP_ATTR_FLAG_EXTLEN);
+               stream_putc(s,
+                           BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL
+                                   | BGP_ATTR_FLAG_EXTLEN);
                stream_putc(s, attrtype);
                stream_putw(s, attrlenfield & 0xffff);
        } else {
@@ -3040,14 +3044,15 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,
        if (CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_SEND_COMMUNITY)
            && (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_COMMUNITIES))) {
                if (attr->community->size * 4 > 255) {
-                       stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                              | BGP_ATTR_FLAG_TRANS
-                                              | BGP_ATTR_FLAG_EXTLEN);
+                       stream_putc(s,
+                                   BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS
+                                           | BGP_ATTR_FLAG_EXTLEN);
                        stream_putc(s, BGP_ATTR_COMMUNITIES);
                        stream_putw(s, attr->community->size * 4);
                } else {
-                       stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                              | BGP_ATTR_FLAG_TRANS);
+                       stream_putc(s,
+                                   BGP_ATTR_FLAG_OPTIONAL
+                                           | BGP_ATTR_FLAG_TRANS);
                        stream_putc(s, BGP_ATTR_COMMUNITIES);
                        stream_putc(s, attr->community->size * 4);
                }
@@ -3061,14 +3066,15 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,
                       PEER_FLAG_SEND_LARGE_COMMUNITY)
            && (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_LARGE_COMMUNITIES))) {
                if (attr->lcommunity->size * 12 > 255) {
-                       stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                              | BGP_ATTR_FLAG_TRANS
-                                              | BGP_ATTR_FLAG_EXTLEN);
+                       stream_putc(s,
+                                   BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS
+                                           | BGP_ATTR_FLAG_EXTLEN);
                        stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES);
                        stream_putw(s, attr->lcommunity->size * 12);
                } else {
-                       stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                              | BGP_ATTR_FLAG_TRANS);
+                       stream_putc(s,
+                                   BGP_ATTR_FLAG_OPTIONAL
+                                           | BGP_ATTR_FLAG_TRANS);
                        stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES);
                        stream_putc(s, attr->lcommunity->size * 12);
                }
@@ -3120,14 +3126,16 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,
                if (peer->sort == BGP_PEER_IBGP
                    || peer->sort == BGP_PEER_CONFED) {
                        if (attr->ecommunity->size * 8 > 255) {
-                               stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                                      | BGP_ATTR_FLAG_TRANS
-                                                      | BGP_ATTR_FLAG_EXTLEN);
+                               stream_putc(s,
+                                           BGP_ATTR_FLAG_OPTIONAL
+                                                   | BGP_ATTR_FLAG_TRANS
+                                                   | BGP_ATTR_FLAG_EXTLEN);
                                stream_putc(s, BGP_ATTR_EXT_COMMUNITIES);
                                stream_putw(s, attr->ecommunity->size * 8);
                        } else {
-                               stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                                      | BGP_ATTR_FLAG_TRANS);
+                               stream_putc(s,
+                                           BGP_ATTR_FLAG_OPTIONAL
+                                                   | BGP_ATTR_FLAG_TRANS);
                                stream_putc(s, BGP_ATTR_EXT_COMMUNITIES);
                                stream_putc(s, attr->ecommunity->size * 8);
                        }
@@ -3193,8 +3201,9 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,
                        label_index = attr->label_index;
 
                        if (label_index != BGP_INVALID_LABEL_INDEX) {
-                               stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                                      | BGP_ATTR_FLAG_TRANS);
+                               stream_putc(s,
+                                           BGP_ATTR_FLAG_OPTIONAL
+                                                   | BGP_ATTR_FLAG_TRANS);
                                stream_putc(s, BGP_ATTR_PREFIX_SID);
                                stream_putc(s, 10);
                                stream_putc(s, BGP_PREFIX_SID_LABEL_INDEX);
@@ -3222,8 +3231,9 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,
                 */
                aspath = aspath_delete_confed_seq(aspath);
 
-               stream_putc(s, BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL
-                                      | BGP_ATTR_FLAG_EXTLEN);
+               stream_putc(s,
+                           BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL
+                                   | BGP_ATTR_FLAG_EXTLEN);
                stream_putc(s, BGP_ATTR_AS4_PATH);
                aspath_sizep = stream_get_endp(s);
                stream_putw(s, 0);
@@ -3408,14 +3418,15 @@ void bgp_dump_routes_attr(struct stream *s, struct attr *attr,
        /* Community attribute. */
        if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_COMMUNITIES)) {
                if (attr->community->size * 4 > 255) {
-                       stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                              | BGP_ATTR_FLAG_TRANS
-                                              | BGP_ATTR_FLAG_EXTLEN);
+                       stream_putc(s,
+                                   BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS
+                                           | BGP_ATTR_FLAG_EXTLEN);
                        stream_putc(s, BGP_ATTR_COMMUNITIES);
                        stream_putw(s, attr->community->size * 4);
                } else {
-                       stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                              | BGP_ATTR_FLAG_TRANS);
+                       stream_putc(s,
+                                   BGP_ATTR_FLAG_OPTIONAL
+                                           | BGP_ATTR_FLAG_TRANS);
                        stream_putc(s, BGP_ATTR_COMMUNITIES);
                        stream_putc(s, attr->community->size * 4);
                }
@@ -3425,14 +3436,15 @@ void bgp_dump_routes_attr(struct stream *s, struct attr *attr,
        /* Large Community attribute. */
        if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_LARGE_COMMUNITIES)) {
                if (attr->lcommunity->size * 12 > 255) {
-                       stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                              | BGP_ATTR_FLAG_TRANS
-                                              | BGP_ATTR_FLAG_EXTLEN);
+                       stream_putc(s,
+                                   BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS
+                                           | BGP_ATTR_FLAG_EXTLEN);
                        stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES);
                        stream_putw(s, attr->lcommunity->size * 12);
                } else {
-                       stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                              | BGP_ATTR_FLAG_TRANS);
+                       stream_putc(s,
+                                   BGP_ATTR_FLAG_OPTIONAL
+                                           | BGP_ATTR_FLAG_TRANS);
                        stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES);
                        stream_putc(s, attr->lcommunity->size * 12);
                }
@@ -3477,8 +3489,9 @@ void bgp_dump_routes_attr(struct stream *s, struct attr *attr,
        /* Prefix SID */
        if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_PREFIX_SID)) {
                if (attr->label_index != BGP_INVALID_LABEL_INDEX) {
-                       stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
-                                              | BGP_ATTR_FLAG_TRANS);
+                       stream_putc(s,
+                                   BGP_ATTR_FLAG_OPTIONAL
+                                           | BGP_ATTR_FLAG_TRANS);
                        stream_putc(s, BGP_ATTR_PREFIX_SID);
                        stream_putc(s, 10);
                        stream_putc(s, BGP_PREFIX_SID_LABEL_INDEX);
index c9f0d6f4eb9a6b941173d4644a76d96705f88184..324813c085dcea24220b38d0224957772ec0f6f1 100644 (file)
@@ -220,7 +220,7 @@ typedef enum {
        BGP_ATTR_PARSE_WITHDRAW = -2,
 
        /* only used internally, send notify + convert to BGP_ATTR_PARSE_ERROR
-        */
+          */
        BGP_ATTR_PARSE_ERROR_NOTIFYPLS = -3,
 } bgp_attr_parse_ret_t;
 
index 9b5202ff9109e4ef0cd86520e993dd44cee92e2d..2e277bfa5ff6909960e020fa2215064cea8984dd 100644 (file)
@@ -212,9 +212,8 @@ static void bgp_bfd_update_type(struct peer *peer)
                if ((multihop
                     && !CHECK_FLAG(bfd_info->flags,
                                    BFD_FLAG_BFD_TYPE_MULTIHOP))
-                   || (!multihop
-                       && CHECK_FLAG(bfd_info->flags,
-                                     BFD_FLAG_BFD_TYPE_MULTIHOP))) {
+                   || (!multihop && CHECK_FLAG(bfd_info->flags,
+                                               BFD_FLAG_BFD_TYPE_MULTIHOP))) {
                        bgp_bfd_peer_sendmsg(peer, ZEBRA_BFD_DEST_DEREGISTER);
                        bgp_bfd_peer_sendmsg(peer, ZEBRA_BFD_DEST_REGISTER);
                }
index e29f72b747fa8a5abf694e1cb8ceae77024232e4..4faebb538e8807711d24ab78476d5061f055322d 100644 (file)
@@ -36,9 +36,7 @@
 
 /* privileges */
 static zebra_capabilities_t _caps_p[] = {
-       ZCAP_BIND,
-       ZCAP_NET_RAW,
-       ZCAP_NET_ADMIN,
+       ZCAP_BIND, ZCAP_NET_RAW, ZCAP_NET_ADMIN,
 };
 
 struct zebra_privs_t bgpd_privs = {
index e3ab9437921a1c3ee8331a054dbf9b8fad5f96ca..bd3ae27c054b3335fc581fa7c762a51b8d1ceec6 100644 (file)
@@ -369,9 +369,10 @@ static void bgp_damp_parameter_set(int hlife, int reuse, int sup, int maxsup)
        /* Initialize params per bgp_damp_config. */
        damp->reuse_index_size = REUSE_ARRAY_SIZE;
 
-       damp->ceiling = (int)(damp->reuse_limit
-                             * (pow(2, (double)damp->max_suppress_time
-                                               / damp->half_life)));
+       damp->ceiling =
+               (int)(damp->reuse_limit * (pow(2,
+                                              (double)damp->max_suppress_time
+                                                      / damp->half_life)));
 
        /* Decay-array computations */
        damp->decay_array_size =
@@ -413,11 +414,9 @@ static void bgp_damp_parameter_set(int hlife, int reuse, int sup, int maxsup)
        for (i = 0; i < damp->reuse_index_size; i++) {
                damp->reuse_index[i] =
                        (int)(((double)damp->half_life / DELTA_REUSE)
-                             * log10(1.0
-                                     / (damp->reuse_limit
-                                        * (1.0
-                                           + ((double)i
-                                              / damp->scale_factor))))
+                             * log10(1.0 / (damp->reuse_limit
+                                            * (1.0 + ((double)i
+                                                      / damp->scale_factor))))
                              / log10(0.5));
        }
 }
index d1d06f36ba33d3e68490a1fd078849cd0e08ffea..08313690624631ce9b47923e79663829a3414fe6 100644 (file)
@@ -244,8 +244,9 @@ static void bgp_dump_routes_index_table(struct bgp *bgp)
 
        /* Populate fake peer at index 0, for locally originated routes */
        /* Peer type (IPv4) */
-       stream_putc(obuf, TABLE_DUMP_V2_PEER_INDEX_TABLE_AS4
-                                 + TABLE_DUMP_V2_PEER_INDEX_TABLE_IP);
+       stream_putc(obuf,
+                   TABLE_DUMP_V2_PEER_INDEX_TABLE_AS4
+                           + TABLE_DUMP_V2_PEER_INDEX_TABLE_IP);
        /* Peer BGP ID (0.0.0.0) */
        stream_putl(obuf, 0);
        /* Peer IP address (0.0.0.0) */
index 4d1e690f9cd7da4769376e1011c3accc83ee36e1..f0081e6d020c38a042cae81fc5f5c25cb3cca042 100644 (file)
@@ -2718,10 +2718,9 @@ int bgp_evpn_local_vni_add(struct bgp *bgp, vni_t vni,
  */
 void bgp_evpn_cleanup_on_disable(struct bgp *bgp)
 {
-       hash_iterate(
-               bgp->vnihash,
-               (void (*)(struct hash_backet *, void *))cleanup_vni_on_disable,
-               bgp);
+       hash_iterate(bgp->vnihash, (void (*)(struct hash_backet *,
+                                            void *))cleanup_vni_on_disable,
+                    bgp);
 }
 
 /*
@@ -2731,10 +2730,9 @@ void bgp_evpn_cleanup_on_disable(struct bgp *bgp)
 void bgp_evpn_cleanup(struct bgp *bgp)
 {
        if (bgp->vnihash)
-               hash_iterate(
-                       bgp->vnihash,
-                       (void (*)(struct hash_backet *, void *))free_vni_entry,
-                       bgp);
+               hash_iterate(bgp->vnihash, (void (*)(struct hash_backet *,
+                                                    void *))free_vni_entry,
+                            bgp);
        if (bgp->import_rt_hash)
                hash_free(bgp->import_rt_hash);
        bgp->import_rt_hash = NULL;
index 0e16fa2eae3ec7e2802c4c775882c7926cd25ec1..1225354c0a024ac2255ecadcbc3370a4fbfde579 100644 (file)
@@ -347,6 +347,8 @@ static int bgp_show_ethernet_vpn(struct vty *vty, struct prefix_rd *prd,
        if (bgp == NULL) {
                if (!use_json)
                        vty_out(vty, "No BGP process is configured\n");
+               else
+                       vty_out(vty, "{}\n");
                return CMD_WARNING;
        }
 
@@ -1301,10 +1303,9 @@ static void evpn_show_routes_vni_all(struct vty *vty, struct bgp *bgp,
        wctx.bgp = bgp;
        wctx.vty = vty;
        wctx.vtep_ip = vtep_ip;
-       hash_iterate(
-               bgp->vnihash,
-               (void (*)(struct hash_backet *, void *))show_vni_routes_hash,
-               &wctx);
+       hash_iterate(bgp->vnihash, (void (*)(struct hash_backet *,
+                                            void *))show_vni_routes_hash,
+                    &wctx);
 }
 
 /*
index 8275f3e89c5bed94e27d6be6154b555e784b4351..cf1cb1868966cecdb779c667a33040c2d0884d69 100644 (file)
@@ -1394,8 +1394,9 @@ static int bgp_establish(struct peer *peer)
        }
 
        if (other == peer)
-               ret = 1; /* bgp_establish specific code when xfer_conn
-                           happens. */
+               ret =
+                       1; /* bgp_establish specific code when xfer_conn
+                             happens. */
 
        /* Reset capability open status flag. */
        if (!CHECK_FLAG(peer->sflags, PEER_STATUS_CAPABILITY_OPEN))
index 88c77d978ca8a41057ccc3df02b2f370718a9a3e..ad7411990e1f7156083d6fa6ab6ec1707b0adc83 100644 (file)
@@ -283,7 +283,7 @@ int bgp_nlri_parse_label(struct peer *peer, struct attr *attr,
                                 * an error SHOULD
                                 * be logged locally, and the prefix SHOULD be
                                 * ignored.
-                                */
+                                 */
                                zlog_err(
                                        "%s: IPv4 labeled-unicast NLRI is multicast address %s, ignoring",
                                        peer->host, inet_ntoa(p.u.prefix4));
index 319d28f3fb5ea83acdb2a89b132a8cacf03aafd3..25a562ed68f9c944a4d25e3db77dd770e83210e8 100644 (file)
@@ -101,9 +101,7 @@ static int retain_mode = 0;
 
 /* privileges */
 static zebra_capabilities_t _caps_p[] = {
-       ZCAP_BIND,
-       ZCAP_NET_RAW,
-       ZCAP_NET_ADMIN,
+       ZCAP_BIND, ZCAP_NET_RAW, ZCAP_NET_ADMIN,
 };
 
 struct zebra_privs_t bgpd_privs = {
index a9346582ba76eb7ab1457113322b91df5fbb0f02..d3ee140bb412a0946dc7614498cac03c4c52d6bf 100644 (file)
@@ -102,6 +102,7 @@ int bgp_maximum_paths_unset(struct bgp *bgp, afi_t afi, safi_t safi,
 int bgp_info_nexthop_cmp(struct bgp_info *bi1, struct bgp_info *bi2)
 {
        int compare;
+       struct in6_addr addr1, addr2;
 
        compare = IPV4_ADDR_CMP(&bi1->attr->nexthop, &bi2->attr->nexthop);
        if (!compare) {
@@ -120,13 +121,18 @@ int bgp_info_nexthop_cmp(struct bgp_info *bi1, struct bgp_info *bi2)
                                        &bi2->attr->mp_nexthop_global);
                                break;
                        case BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL:
-                               compare = IPV6_ADDR_CMP(
-                                       &bi1->attr->mp_nexthop_global,
-                                       &bi2->attr->mp_nexthop_global);
+                               addr1 = (bi1->attr->mp_nexthop_prefer_global) ?
+                                       bi1->attr->mp_nexthop_global
+                                       : bi1->attr->mp_nexthop_local;
+                               addr2 = (bi2->attr->mp_nexthop_prefer_global) ?
+                                       bi2->attr->mp_nexthop_global
+                                       : bi2->attr->mp_nexthop_local;
+
+                               if (!bi1->attr->mp_nexthop_prefer_global &&
+                                   !bi2->attr->mp_nexthop_prefer_global)
+                                       compare = !(bi1->peer->ifindex == bi2->peer->ifindex);
                                if (!compare)
-                                       compare = IPV6_ADDR_CMP(
-                                               &bi1->attr->mp_nexthop_local,
-                                               &bi2->attr->mp_nexthop_local);
+                                       compare = IPV6_ADDR_CMP(&addr1, &addr2);
                                break;
                        }
                }
@@ -675,9 +681,8 @@ void bgp_info_mpath_aggregate_update(struct bgp_info *new_best,
 
        bgp_attr_dup(&attr, new_best->attr);
 
-       if (new_best->peer
-           && bgp_flag_check(new_best->peer->bgp,
-                             BGP_FLAG_MULTIPATH_RELAX_AS_SET)) {
+       if (new_best->peer && bgp_flag_check(new_best->peer->bgp,
+                                            BGP_FLAG_MULTIPATH_RELAX_AS_SET)) {
 
                /* aggregate attribute from multipath constituents */
                aspath = aspath_dup(attr.aspath);
index d56d62e6b90273fb557723812dc2beddf4890a86..baf081c815f73b691563fe7ef69625c86344aa0e 100644 (file)
@@ -374,6 +374,8 @@ int bgp_show_mpls_vpn(struct vty *vty, afi_t afi, struct prefix_rd *prd,
        if (bgp == NULL) {
                if (!use_json)
                        vty_out(vty, "No BGP process is configured\n");
+               else
+                       vty_out(vty, "{}\n");
                return CMD_WARNING;
        }
 
@@ -612,9 +614,8 @@ int bgp_show_mpls_vpn(struct vty *vty, afi_t afi, struct prefix_rd *prd,
 
        if (use_json) {
                json_object_object_add(json, "routes", json_nroute);
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                if (output_count == 0)
index 9c13869206efeaa4d0638164358197bae1295b62..70299ea456f4017d426b3bee400fa901d6422924 100644 (file)
@@ -158,9 +158,8 @@ int bgp_set_socket_ttl(struct peer *peer, int bgp_sock)
                if (ret) {
                        zlog_err(
                                "%s: Can't set TxTTL on peer (rtrid %s) socket, err = %d",
-                               __func__,
-                               inet_ntop(AF_INET, &peer->remote_id, buf,
-                                         sizeof(buf)),
+                               __func__, inet_ntop(AF_INET, &peer->remote_id,
+                                                   buf, sizeof(buf)),
                                errno);
                        return ret;
                }
@@ -173,9 +172,8 @@ int bgp_set_socket_ttl(struct peer *peer, int bgp_sock)
                if (ret) {
                        zlog_err(
                                "%s: Can't set TxTTL on peer (rtrid %s) socket, err = %d",
-                               __func__,
-                               inet_ntop(AF_INET, &peer->remote_id, buf,
-                                         sizeof(buf)),
+                               __func__, inet_ntop(AF_INET, &peer->remote_id,
+                                                   buf, sizeof(buf)),
                                errno);
                        return ret;
                }
@@ -184,9 +182,8 @@ int bgp_set_socket_ttl(struct peer *peer, int bgp_sock)
                if (ret) {
                        zlog_err(
                                "%s: Can't set MinTTL on peer (rtrid %s) socket, err = %d",
-                               __func__,
-                               inet_ntop(AF_INET, &peer->remote_id, buf,
-                                         sizeof(buf)),
+                               __func__, inet_ntop(AF_INET, &peer->remote_id,
+                                                   buf, sizeof(buf)),
                                errno);
                        return ret;
                }
index d31e54c6729bb2782d695d7abc25f0df27a0f8e1..b18a4b7c46e6237bc63c2349dc5c0191066861ee 100644 (file)
@@ -744,18 +744,18 @@ static const struct message capcode_str[] = {
 
 /* Minimum sizes for length field of each cap (so not inc. the header) */
 static const size_t cap_minsizes[] = {
-       [CAPABILITY_CODE_MP] = CAPABILITY_CODE_MP_LEN,
-       [CAPABILITY_CODE_REFRESH] = CAPABILITY_CODE_REFRESH_LEN,
-       [CAPABILITY_CODE_ORF] = CAPABILITY_CODE_ORF_LEN,
-       [CAPABILITY_CODE_RESTART] = CAPABILITY_CODE_RESTART_LEN,
-       [CAPABILITY_CODE_AS4] = CAPABILITY_CODE_AS4_LEN,
-       [CAPABILITY_CODE_ADDPATH] = CAPABILITY_CODE_ADDPATH_LEN,
-       [CAPABILITY_CODE_DYNAMIC] = CAPABILITY_CODE_DYNAMIC_LEN,
-       [CAPABILITY_CODE_DYNAMIC_OLD] = CAPABILITY_CODE_DYNAMIC_LEN,
-       [CAPABILITY_CODE_ENHE] = CAPABILITY_CODE_ENHE_LEN,
-       [CAPABILITY_CODE_REFRESH_OLD] = CAPABILITY_CODE_REFRESH_LEN,
-       [CAPABILITY_CODE_ORF_OLD] = CAPABILITY_CODE_ORF_LEN,
-       [CAPABILITY_CODE_FQDN] = CAPABILITY_CODE_MIN_FQDN_LEN,
+               [CAPABILITY_CODE_MP] = CAPABILITY_CODE_MP_LEN,
+               [CAPABILITY_CODE_REFRESH] = CAPABILITY_CODE_REFRESH_LEN,
+               [CAPABILITY_CODE_ORF] = CAPABILITY_CODE_ORF_LEN,
+               [CAPABILITY_CODE_RESTART] = CAPABILITY_CODE_RESTART_LEN,
+               [CAPABILITY_CODE_AS4] = CAPABILITY_CODE_AS4_LEN,
+               [CAPABILITY_CODE_ADDPATH] = CAPABILITY_CODE_ADDPATH_LEN,
+               [CAPABILITY_CODE_DYNAMIC] = CAPABILITY_CODE_DYNAMIC_LEN,
+               [CAPABILITY_CODE_DYNAMIC_OLD] = CAPABILITY_CODE_DYNAMIC_LEN,
+               [CAPABILITY_CODE_ENHE] = CAPABILITY_CODE_ENHE_LEN,
+               [CAPABILITY_CODE_REFRESH_OLD] = CAPABILITY_CODE_REFRESH_LEN,
+               [CAPABILITY_CODE_ORF_OLD] = CAPABILITY_CODE_ORF_LEN,
+               [CAPABILITY_CODE_FQDN] = CAPABILITY_CODE_MIN_FQDN_LEN,
 };
 
 /* value the capability must be a multiple of.
@@ -764,12 +764,18 @@ static const size_t cap_minsizes[] = {
  * table should be set to 1.
  */
 static const size_t cap_modsizes[] = {
-       [CAPABILITY_CODE_MP] = 4,      [CAPABILITY_CODE_REFRESH] = 1,
-       [CAPABILITY_CODE_ORF] = 1,     [CAPABILITY_CODE_RESTART] = 1,
-       [CAPABILITY_CODE_AS4] = 4,     [CAPABILITY_CODE_ADDPATH] = 4,
-       [CAPABILITY_CODE_DYNAMIC] = 1, [CAPABILITY_CODE_DYNAMIC_OLD] = 1,
-       [CAPABILITY_CODE_ENHE] = 6,    [CAPABILITY_CODE_REFRESH_OLD] = 1,
-       [CAPABILITY_CODE_ORF_OLD] = 1, [CAPABILITY_CODE_FQDN] = 1,
+               [CAPABILITY_CODE_MP] = 4,
+               [CAPABILITY_CODE_REFRESH] = 1,
+               [CAPABILITY_CODE_ORF] = 1,
+               [CAPABILITY_CODE_RESTART] = 1,
+               [CAPABILITY_CODE_AS4] = 4,
+               [CAPABILITY_CODE_ADDPATH] = 4,
+               [CAPABILITY_CODE_DYNAMIC] = 1,
+               [CAPABILITY_CODE_DYNAMIC_OLD] = 1,
+               [CAPABILITY_CODE_ENHE] = 6,
+               [CAPABILITY_CODE_REFRESH_OLD] = 1,
+               [CAPABILITY_CODE_ORF_OLD] = 1,
+               [CAPABILITY_CODE_FQDN] = 1,
 };
 
 /**
@@ -1309,8 +1315,9 @@ void bgp_open_capability(struct stream *s, struct peer *peer)
                                         */
                                        SET_FLAG(peer->cap, PEER_CAP_ENHE_ADV);
                                        stream_putc(s, BGP_OPEN_OPT_CAP);
-                                       stream_putc(s, CAPABILITY_CODE_ENHE_LEN
-                                                              + 2);
+                                       stream_putc(s,
+                                                   CAPABILITY_CODE_ENHE_LEN
+                                                           + 2);
                                        stream_putc(s, CAPABILITY_CODE_ENHE);
                                        stream_putc(s,
                                                    CAPABILITY_CODE_ENHE_LEN);
index b0d6a9388a10cec61a5062d7b283954be6110e80..e92f2d69773efa41741e83112e34b9cac3b00e1f 100644 (file)
@@ -547,8 +547,9 @@ void bgp_open_send(struct peer *peer)
 
        /* Set open packet values. */
        stream_putc(s, BGP_VERSION_4); /* BGP version */
-       stream_putw(s, (local_as <= BGP_AS_MAX) ? (u_int16_t)local_as
-                                               : BGP_AS_TRANS);
+       stream_putw(s,
+                   (local_as <= BGP_AS_MAX) ? (u_int16_t)local_as
+                                            : BGP_AS_TRANS);
        stream_putw(s, send_holdtime);          /* Hold Time */
        stream_put_in_addr(s, &peer->local_id); /* BGP Identifier */
 
index 1c1c95525c4df1cc5be758334c2376c830db37ed..b554aeb32b5c2b83d76d141c6ba189946629d57f 100644 (file)
@@ -1916,9 +1916,8 @@ int subgroup_process_announce_selected(struct update_subgroup *subgrp,
                                                 : NULL);
 
        /* First update is deferred until ORF or ROUTE-REFRESH is received */
-       if (onlypeer
-           && CHECK_FLAG(onlypeer->af_sflags[afi][safi],
-                         PEER_STATUS_ORF_WAIT_REFRESH))
+       if (onlypeer && CHECK_FLAG(onlypeer->af_sflags[afi][safi],
+                                  PEER_STATUS_ORF_WAIT_REFRESH))
                return 0;
 
        memset(&attr, 0, sizeof(struct attr));
@@ -3869,7 +3868,7 @@ int bgp_nlri_parse_ip(struct peer *peer, struct attr *attr,
                                 * an error SHOULD
                                 * be logged locally, and the prefix SHOULD be
                                 * ignored.
-                                */
+                                 */
                                zlog_err(
                                        "%s: IPv4 unicast NLRI is multicast address %s, ignoring",
                                        peer->host, inet_ntoa(p.u.prefix4));
@@ -5210,16 +5209,14 @@ DEFUN (no_bgp_network_mask_natural,
 }
 
 ALIAS(no_bgp_network, no_bgp_network_label_index_cmd,
-      "no network A.B.C.D/M label-index (0-1048560)",
-      NO_STR
+      "no network A.B.C.D/M label-index (0-1048560)", NO_STR
       "Specify a network to announce via BGP\n"
       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
       "Label index to associate with the prefix\n"
       "Label index value\n")
 
 ALIAS(no_bgp_network, no_bgp_network_label_index_route_map_cmd,
-      "no network A.B.C.D/M label-index (0-1048560) route-map WORD",
-      NO_STR
+      "no network A.B.C.D/M label-index (0-1048560) route-map WORD", NO_STR
       "Specify a network to announce via BGP\n"
       "IP prefix\n"
       "Label index to associate with the prefix\n"
@@ -5301,16 +5298,14 @@ DEFUN (no_ipv6_bgp_network,
 }
 
 ALIAS(no_ipv6_bgp_network, no_ipv6_bgp_network_label_index_cmd,
-      "no network X:X::X:X/M label-index (0-1048560)",
-      NO_STR
+      "no network X:X::X:X/M label-index (0-1048560)", NO_STR
       "Specify a network to announce via BGP\n"
       "IPv6 prefix <network>/<length>\n"
       "Label index to associate with the prefix\n"
       "Label index value\n")
 
 ALIAS(no_ipv6_bgp_network, no_ipv6_bgp_network_label_index_route_map_cmd,
-      "no network X:X::X:X/M label-index (0-1048560) route-map WORD",
-      NO_STR
+      "no network X:X::X:X/M label-index (0-1048560) route-map WORD", NO_STR
       "Specify a network to announce via BGP\n"
       "IPv6 prefix\n"
       "Label index to associate with the prefix\n"
@@ -6510,10 +6505,11 @@ void route_vty_out(struct vty *vty, struct prefix *p, struct bgp_info *binfo,
                                                len = vty_out(
                                                        vty, "%s",
                                                        binfo->peer->conf_if);
-                                               len = 7 - len; /* len of IPv6
-                                                                 addr + max
-                                                                 len of def
-                                                                 ifname */
+                                               len =
+                                                       7 - len; /* len of IPv6
+                                                                   addr + max
+                                                                   len of def
+                                                                   ifname */
 
                                                if (len < 1)
                                                        vty_out(vty, "\n%*s",
@@ -7000,10 +6996,9 @@ static void damp_route_vty_out(struct vty *vty, struct prefix *p,
                bgp_damp_reuse_time_vty(vty, binfo, timebuf, BGP_UPTIME_LEN,
                                        use_json, json);
        else
-               vty_out(vty, "%s ",
-                       bgp_damp_reuse_time_vty(vty, binfo, timebuf,
-                                               BGP_UPTIME_LEN, use_json,
-                                               json));
+               vty_out(vty, "%s ", bgp_damp_reuse_time_vty(vty, binfo, timebuf,
+                                                           BGP_UPTIME_LEN,
+                                                           use_json, json));
 
        /* Print attribute */
        attr = binfo->attr;
@@ -7082,9 +7077,8 @@ static void flap_route_vty_out(struct vty *vty, struct prefix *p,
                peer_uptime(bdi->start_time, timebuf, BGP_UPTIME_LEN, use_json,
                            json);
        else
-               vty_out(vty, "%s ",
-                       peer_uptime(bdi->start_time, timebuf, BGP_UPTIME_LEN, 0,
-                                   NULL));
+               vty_out(vty, "%s ", peer_uptime(bdi->start_time, timebuf,
+                                               BGP_UPTIME_LEN, 0, NULL));
 
        if (CHECK_FLAG(binfo->flags, BGP_INFO_DAMPED)
            && !CHECK_FLAG(binfo->flags, BGP_INFO_HISTORY)) {
@@ -8263,6 +8257,8 @@ static int bgp_show(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
        if (bgp == NULL) {
                if (!use_json)
                        vty_out(vty, "No BGP process is configured\n");
+               else
+                       vty_out(vty, "{}\n");
                return CMD_WARNING;
        }
 
@@ -8604,9 +8600,8 @@ static int bgp_show_route_in_table(struct vty *vty, struct bgp *bgp,
                if (display)
                        json_object_object_add(json, "paths", json_paths);
 
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                if (!display) {
@@ -8624,8 +8619,16 @@ static int bgp_show_route(struct vty *vty, struct bgp *bgp, const char *ip_str,
                          int prefix_check, enum bgp_path_type pathtype,
                          u_char use_json)
 {
-       if (!bgp)
+       if (!bgp) {
                bgp = bgp_get_default();
+               if (!bgp) {
+                       if (!use_json)
+                               vty_out(vty, "No BGP process is configured\n");
+                       else
+                               vty_out(vty, "{}\n");
+                       return CMD_WARNING;
+               }
+       }
 
        /* labeled-unicast routes live in the unicast table */
        if (safi == SAFI_LABELED_UNICAST)
@@ -9276,20 +9279,21 @@ enum bgp_stats {
 };
 
 static const char *table_stats_strs[] = {
-       [BGP_STATS_PREFIXES] = "Total Prefixes",
-       [BGP_STATS_TOTPLEN] = "Average prefix length",
-       [BGP_STATS_RIB] = "Total Advertisements",
-       [BGP_STATS_UNAGGREGATEABLE] = "Unaggregateable prefixes",
-       [BGP_STATS_MAX_AGGREGATEABLE] = "Maximum aggregateable prefixes",
-       [BGP_STATS_AGGREGATES] = "BGP Aggregate advertisements",
-       [BGP_STATS_SPACE] = "Address space advertised",
-       [BGP_STATS_ASPATH_COUNT] = "Advertisements with paths",
-       [BGP_STATS_ASPATH_MAXHOPS] = "Longest AS-Path (hops)",
-       [BGP_STATS_ASPATH_MAXSIZE] = "Largest AS-Path (bytes)",
-       [BGP_STATS_ASPATH_TOTHOPS] = "Average AS-Path length (hops)",
-       [BGP_STATS_ASPATH_TOTSIZE] = "Average AS-Path size (bytes)",
-       [BGP_STATS_ASN_HIGHEST] = "Highest public ASN",
-       [BGP_STATS_MAX] = NULL,
+               [BGP_STATS_PREFIXES] = "Total Prefixes",
+               [BGP_STATS_TOTPLEN] = "Average prefix length",
+               [BGP_STATS_RIB] = "Total Advertisements",
+               [BGP_STATS_UNAGGREGATEABLE] = "Unaggregateable prefixes",
+               [BGP_STATS_MAX_AGGREGATEABLE] =
+                       "Maximum aggregateable prefixes",
+               [BGP_STATS_AGGREGATES] = "BGP Aggregate advertisements",
+               [BGP_STATS_SPACE] = "Address space advertised",
+               [BGP_STATS_ASPATH_COUNT] = "Advertisements with paths",
+               [BGP_STATS_ASPATH_MAXHOPS] = "Longest AS-Path (hops)",
+               [BGP_STATS_ASPATH_MAXSIZE] = "Largest AS-Path (bytes)",
+               [BGP_STATS_ASPATH_TOTHOPS] = "Average AS-Path length (hops)",
+               [BGP_STATS_ASPATH_TOTSIZE] = "Average AS-Path size (bytes)",
+               [BGP_STATS_ASN_HIGHEST] = "Highest public ASN",
+               [BGP_STATS_MAX] = NULL,
 };
 
 struct bgp_table_stats {
@@ -9524,11 +9528,16 @@ enum bgp_pcounts {
 };
 
 static const char *pcount_strs[] = {
-       [PCOUNT_ADJ_IN] = "Adj-in",   [PCOUNT_DAMPED] = "Damped",
-       [PCOUNT_REMOVED] = "Removed", [PCOUNT_HISTORY] = "History",
-       [PCOUNT_STALE] = "Stale",     [PCOUNT_VALID] = "Valid",
-       [PCOUNT_ALL] = "All RIB",     [PCOUNT_COUNTED] = "PfxCt counted",
-       [PCOUNT_PFCNT] = "Useable",   [PCOUNT_MAX] = NULL,
+               [PCOUNT_ADJ_IN] = "Adj-in",
+               [PCOUNT_DAMPED] = "Damped",
+               [PCOUNT_REMOVED] = "Removed",
+               [PCOUNT_HISTORY] = "History",
+               [PCOUNT_STALE] = "Stale",
+               [PCOUNT_VALID] = "Valid",
+               [PCOUNT_ALL] = "All RIB",
+               [PCOUNT_COUNTED] = "PfxCt counted",
+               [PCOUNT_PFCNT] = "Useable",
+               [PCOUNT_MAX] = NULL,
 };
 
 struct peer_pcounts {
@@ -9629,9 +9638,9 @@ static int bgp_peer_counts(struct vty *vty, struct peer *peer, afi_t afi,
        pcounts.table = peer->bgp->rib[afi][safi];
 
        /* in-place call via thread subsystem so as to record execution time
-        *    * stats for the thread-walk (i.e. ensure this can't be blamed on
-        *       * on just vty_read()).
-        *          */
+       *    * stats for the thread-walk (i.e. ensure this can't be blamed on
+       *       * on just vty_read()).
+       *          */
        thread_execute(bm->master, bgp_peer_count_walker, &pcounts, 0);
 
        if (use_json) {
@@ -9888,9 +9897,8 @@ static void show_adj_route(struct vty *vty, struct peer *peer, afi_t afi,
                                               "bgpOriginatingDefaultNetwork",
                                               "0.0.0.0");
                } else {
-                       vty_out(vty,
-                               "BGP table version is %" PRIu64
-                               ", local router ID is %s\n",
+                       vty_out(vty, "BGP table version is %" PRIu64
+                                    ", local router ID is %s\n",
                                table->version, inet_ntoa(bgp->router_id));
                        vty_out(vty, BGP_SHOW_SCODE_HEADER);
                        vty_out(vty, BGP_SHOW_OCODE_HEADER);
index cb4c9a21ee86b22733fdc41de1c75f892ef876c8..1a1817bad35642410d83b8b13e4049be4a57b175 100644 (file)
@@ -97,8 +97,10 @@ struct bgp_info_extra {
                                struct in6_addr addr6;
                        } un; /* cached un address */
                        time_t create_time;
-                       struct prefix aux_prefix; /* AFI_L2VPN: the IP addr,
-                                                    if family set */
+                       struct
+                               prefix
+                                       aux_prefix; /* AFI_L2VPN: the IP addr,
+                                                      if family set */
                } import;
 
        } vnc;
index 8a9bd764eec7daa5866bd352f9b53c95662c8a6d..285bb9a80cea2bf5f251a636d6d704d71f21da1d 100644 (file)
@@ -652,10 +652,7 @@ static route_map_result_t route_match_metric(void *rule, struct prefix *prefix,
 
 /* Route map commands for metric matching. */
 struct route_map_rule_cmd route_match_metric_cmd = {
-       "metric",
-       route_match_metric,
-       route_value_compile,
-       route_value_free,
+       "metric", route_match_metric, route_value_compile, route_value_free,
 };
 
 /* `match as-path ASPATH' */
@@ -1050,9 +1047,7 @@ static route_map_result_t route_match_tag(void *rule, struct prefix *prefix,
 
 /* Route map commands for tag matching. */
 static struct route_map_rule_cmd route_match_tag_cmd = {
-       "tag",
-       route_match_tag,
-       route_map_rule_tag_compile,
+       "tag", route_match_tag, route_map_rule_tag_compile,
        route_map_rule_tag_free,
 };
 
@@ -1197,9 +1192,7 @@ static route_map_result_t route_set_local_pref(void *rule,
 
 /* Set local preference rule structure. */
 struct route_map_rule_cmd route_set_local_pref_cmd = {
-       "local-preference",
-       route_set_local_pref,
-       route_value_compile,
+       "local-preference", route_set_local_pref, route_value_compile,
        route_value_free,
 };
 
@@ -1228,10 +1221,7 @@ static route_map_result_t route_set_weight(void *rule, struct prefix *prefix,
 
 /* Set local preference rule structure. */
 struct route_map_rule_cmd route_set_weight_cmd = {
-       "weight",
-       route_set_weight,
-       route_value_compile,
-       route_value_free,
+       "weight", route_set_weight, route_value_compile, route_value_free,
 };
 
 /* `set metric METRIC' */
@@ -1263,10 +1253,7 @@ static route_map_result_t route_set_metric(void *rule, struct prefix *prefix,
 
 /* Set metric rule structure. */
 struct route_map_rule_cmd route_set_metric_cmd = {
-       "metric",
-       route_set_metric,
-       route_value_compile,
-       route_value_free,
+       "metric", route_set_metric, route_value_compile, route_value_free,
 };
 
 /* `set as-path prepend ASPATH' */
@@ -1324,10 +1311,8 @@ static void route_set_aspath_prepend_free(void *rule)
 
 /* Set as-path prepend rule structure. */
 struct route_map_rule_cmd route_set_aspath_prepend_cmd = {
-       "as-path prepend",
-       route_set_aspath_prepend,
-       route_set_aspath_prepend_compile,
-       route_set_aspath_prepend_free,
+       "as-path prepend", route_set_aspath_prepend,
+       route_set_aspath_prepend_compile, route_set_aspath_prepend_free,
 };
 
 /* `set as-path exclude ASn' */
@@ -1360,9 +1345,7 @@ static route_map_result_t route_set_aspath_exclude(void *rule,
 
 /* Set ASn exlude rule structure. */
 struct route_map_rule_cmd route_set_aspath_exclude_cmd = {
-       "as-path exclude",
-       route_set_aspath_exclude,
-       route_aspath_compile,
+       "as-path exclude", route_set_aspath_exclude, route_aspath_compile,
        route_aspath_free,
 };
 
@@ -1475,9 +1458,7 @@ static void route_set_community_free(void *rule)
 
 /* Set community rule structure. */
 struct route_map_rule_cmd route_set_community_cmd = {
-       "community",
-       route_set_community,
-       route_set_community_compile,
+       "community", route_set_community, route_set_community_compile,
        route_set_community_free,
 };
 
@@ -1595,9 +1576,7 @@ static void route_set_lcommunity_free(void *rule)
 
 /* Set community rule structure. */
 struct route_map_rule_cmd route_set_lcommunity_cmd = {
-       "large-community",
-       route_set_lcommunity,
-       route_set_lcommunity_compile,
+       "large-community", route_set_lcommunity, route_set_lcommunity_compile,
        route_set_lcommunity_free,
 };
 
@@ -1680,10 +1659,8 @@ static void route_set_lcommunity_delete_free(void *rule)
 
 /* Set lcommunity rule structure. */
 struct route_map_rule_cmd route_set_lcommunity_delete_cmd = {
-       "large-comm-list",
-       route_set_lcommunity_delete,
-       route_set_lcommunity_delete_compile,
-       route_set_lcommunity_delete_free,
+       "large-comm-list", route_set_lcommunity_delete,
+       route_set_lcommunity_delete_compile, route_set_lcommunity_delete_free,
 };
 
 
@@ -1766,10 +1743,8 @@ static void route_set_community_delete_free(void *rule)
 
 /* Set community rule structure. */
 struct route_map_rule_cmd route_set_community_delete_cmd = {
-       "comm-list",
-       route_set_community_delete,
-       route_set_community_delete_compile,
-       route_set_community_delete_free,
+       "comm-list", route_set_community_delete,
+       route_set_community_delete_compile, route_set_community_delete_free,
 };
 
 /* `set extcommunity rt COMMUNITY' */
@@ -1836,10 +1811,8 @@ static void route_set_ecommunity_free(void *rule)
 
 /* Set community rule structure. */
 struct route_map_rule_cmd route_set_ecommunity_rt_cmd = {
-       "extcommunity rt",
-       route_set_ecommunity,
-       route_set_ecommunity_rt_compile,
-       route_set_ecommunity_free,
+       "extcommunity rt", route_set_ecommunity,
+       route_set_ecommunity_rt_compile, route_set_ecommunity_free,
 };
 
 /* `set extcommunity soo COMMUNITY' */
@@ -1858,10 +1831,8 @@ static void *route_set_ecommunity_soo_compile(const char *arg)
 
 /* Set community rule structure. */
 struct route_map_rule_cmd route_set_ecommunity_soo_cmd = {
-       "extcommunity soo",
-       route_set_ecommunity,
-       route_set_ecommunity_soo_compile,
-       route_set_ecommunity_free,
+       "extcommunity soo", route_set_ecommunity,
+       route_set_ecommunity_soo_compile, route_set_ecommunity_free,
 };
 
 /* `set origin ORIGIN' */
@@ -1909,9 +1880,7 @@ static void route_set_origin_free(void *rule)
 
 /* Set origin rule structure. */
 struct route_map_rule_cmd route_set_origin_cmd = {
-       "origin",
-       route_set_origin,
-       route_set_origin_compile,
+       "origin", route_set_origin, route_set_origin_compile,
        route_set_origin_free,
 };
 
@@ -1948,10 +1917,8 @@ static void route_set_atomic_aggregate_free(void *rule)
 
 /* Set atomic aggregate rule structure. */
 struct route_map_rule_cmd route_set_atomic_aggregate_cmd = {
-       "atomic-aggregate",
-       route_set_atomic_aggregate,
-       route_set_atomic_aggregate_compile,
-       route_set_atomic_aggregate_free,
+       "atomic-aggregate", route_set_atomic_aggregate,
+       route_set_atomic_aggregate_compile, route_set_atomic_aggregate_free,
 };
 
 /* `set aggregator as AS A.B.C.D' */
@@ -2006,10 +1973,8 @@ static void route_set_aggregator_as_free(void *rule)
 }
 
 struct route_map_rule_cmd route_set_aggregator_as_cmd = {
-       "aggregator as",
-       route_set_aggregator_as,
-       route_set_aggregator_as_compile,
-       route_set_aggregator_as_free,
+       "aggregator as", route_set_aggregator_as,
+       route_set_aggregator_as_compile, route_set_aggregator_as_free,
 };
 
 /* Set tag to object. object must be pointer to struct bgp_info */
@@ -2032,9 +1997,7 @@ static route_map_result_t route_set_tag(void *rule, struct prefix *prefix,
 
 /* Route map commands for tag set. */
 static struct route_map_rule_cmd route_set_tag_cmd = {
-       "tag",
-       route_set_tag,
-       route_map_rule_tag_compile,
+       "tag", route_set_tag, route_map_rule_tag_compile,
        route_map_rule_tag_free,
 };
 
@@ -2067,9 +2030,7 @@ static route_map_result_t route_set_label_index(void *rule,
 
 /* Route map commands for label-index set. */
 static struct route_map_rule_cmd route_set_label_index_cmd = {
-       "label-index",
-       route_set_label_index,
-       route_value_compile,
+       "label-index", route_set_label_index, route_value_compile,
        route_value_free,
 };
 
@@ -2596,10 +2557,8 @@ static void route_set_originator_id_free(void *rule)
 
 /* Set originator-id rule structure. */
 struct route_map_rule_cmd route_set_originator_id_cmd = {
-       "originator-id",
-       route_set_originator_id,
-       route_set_originator_id_compile,
-       route_set_originator_id_free,
+       "originator-id", route_set_originator_id,
+       route_set_originator_id_compile, route_set_originator_id_free,
 };
 
 /* Add bgp route map rule. */
index 50ced81644f0b25ebfbdad1e889e912cf13b3d5d..8a9d61f3058ab89370c992df2cb00c441cff399d 100644 (file)
@@ -864,6 +864,8 @@ static u_char *bgp4PathAttrTable(struct variable *v, oid name[], size_t *length,
                return SNMP_INTEGER(-1);
                break;
        case BGP4PATHATTRBEST: /* 13 */
+                              /* $FRR indent$ */
+                              /* clang-format off */
 #define BGP4_PathAttrBest_false 1
 #define BGP4_PathAttrBest_true  2
                if (CHECK_FLAG(binfo->flags, BGP_INFO_SELECTED))
index b791bc1a1c86f489ffbf10cc6971db9dcf33667d..77e6157150dbf11ae8c0700ee6333e461f16a979 100644 (file)
@@ -1121,8 +1121,8 @@ int update_subgroup_check_merge(struct update_subgroup *subgrp,
 }
 
 /*
- * update_subgroup_merge_check_thread_cb
- */
+* update_subgroup_merge_check_thread_cb
+*/
 static int update_subgroup_merge_check_thread_cb(struct thread *thread)
 {
        struct update_subgroup *subgrp;
index d6c8055b6475ae711574b567e33ef0d8b6a626b0..52a21679b895c40a9b398629a490fcaddb4b9e6a 100644 (file)
@@ -267,6 +267,7 @@ struct update_subgroup {
  */
 #define SUBGRP_DECR_STAT(subgrp, stat) SUBGRP_INCR_STAT_BY(subgrp, stat, -1)
 
+
 typedef int (*updgrp_walkcb)(struct update_group *updgrp, void *ctx);
 
 /* really a private structure */
index a0961d8cee672b1a9c469785df026821e7e968d4..0a33fa5ed4237379c7851d44da1c8a5ca1289815 100644 (file)
@@ -646,10 +646,9 @@ void subgroup_announce_route(struct update_subgroup *subgrp)
         */
        onlypeer = ((SUBGRP_PCOUNT(subgrp) == 1) ? (SUBGRP_PFIRST(subgrp))->peer
                                                 : NULL);
-       if (onlypeer
-           && CHECK_FLAG(onlypeer->af_sflags[SUBGRP_AFI(subgrp)]
-                                            [SUBGRP_SAFI(subgrp)],
-                         PEER_STATUS_ORF_WAIT_REFRESH))
+       if (onlypeer && CHECK_FLAG(onlypeer->af_sflags[SUBGRP_AFI(subgrp)]
+                                                     [SUBGRP_SAFI(subgrp)],
+                                  PEER_STATUS_ORF_WAIT_REFRESH))
                return;
 
        if (SUBGRP_SAFI(subgrp) != SAFI_MPLS_VPN
index 53d695167f738b0bf6bfe99c42d2af271c3353ad..1a23a36e91a2bec06557ac1903f27226aa0606cb 100644 (file)
@@ -700,6 +700,7 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
        int send_attr_printed = 0;
        int num_pfx = 0;
        int addpath_encode = 0;
+       int addpath_overhead = 0;
        u_int32_t addpath_tx_id = 0;
        struct prefix_rd *prd = NULL;
        mpls_label_t label = MPLS_INVALID_LABEL;
@@ -721,6 +722,7 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
        bpacket_attr_vec_arr_reset(&vecarr);
 
        addpath_encode = bgp_addpath_encode_tx(peer, afi, safi);
+       addpath_overhead = addpath_encode ? BGP_ADDPATH_ID_LEN : 0;
 
        adv = BGP_ADV_FIFO_HEAD(&subgrp->sync->update);
        while (adv) {
@@ -732,9 +734,8 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
 
                space_remaining = STREAM_CONCAT_REMAIN(s, snlri, STREAM_SIZE(s))
                                  - BGP_MAX_PACKET_SIZE_OVERFLOW;
-               space_needed =
-                       BGP_NLRI_LENGTH
-                       + bgp_packet_mpattr_prefix_size(afi, safi, &rn->p);
+               space_needed = BGP_NLRI_LENGTH + addpath_overhead +
+                              bgp_packet_mpattr_prefix_size(afi, safi, &rn->p);
 
                /* When remaining space can't include NLRI and it's length.  */
                if (space_remaining < space_needed)
@@ -778,9 +779,9 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
                        space_remaining =
                                STREAM_CONCAT_REMAIN(s, snlri, STREAM_SIZE(s))
                                - BGP_MAX_PACKET_SIZE_OVERFLOW;
-                       space_needed = BGP_NLRI_LENGTH
-                                      + bgp_packet_mpattr_prefix_size(
-                                                afi, safi, &rn->p);
+                       space_needed = BGP_NLRI_LENGTH + addpath_overhead +
+                               bgp_packet_mpattr_prefix_size(afi, safi,
+                                                             &rn->p);
 
                        /* If the attributes alone do not leave any room for
                         * NLRI then
@@ -937,6 +938,7 @@ struct bpacket *subgroup_withdraw_packet(struct update_subgroup *subgrp)
        int space_needed = 0;
        int num_pfx = 0;
        int addpath_encode = 0;
+       int addpath_overhead = 0;
        u_int32_t addpath_tx_id = 0;
        struct prefix_rd *prd = NULL;
 
@@ -953,6 +955,7 @@ struct bpacket *subgroup_withdraw_packet(struct update_subgroup *subgrp)
        s = subgrp->work;
        stream_reset(s);
        addpath_encode = bgp_addpath_encode_tx(peer, afi, safi);
+       addpath_overhead = addpath_encode ? BGP_ADDPATH_ID_LEN : 0;
 
        while ((adv = BGP_ADV_FIFO_HEAD(&subgrp->sync->withdraw)) != NULL) {
                assert(adv->rn);
@@ -963,7 +966,7 @@ struct bpacket *subgroup_withdraw_packet(struct update_subgroup *subgrp)
                space_remaining =
                        STREAM_REMAIN(s) - BGP_MAX_PACKET_SIZE_OVERFLOW;
                space_needed =
-                       BGP_NLRI_LENGTH + BGP_TOTAL_ATTR_LEN
+                       BGP_NLRI_LENGTH + addpath_overhead + BGP_TOTAL_ATTR_LEN
                        + bgp_packet_mpattr_prefix_size(afi, safi, &rn->p);
 
                if (space_remaining < space_needed)
index c9baf5af34df38d4f176cb1c0727bbff60fee791..4661e195a207c7e0d5a1d67245fb19034172c380 100644 (file)
@@ -51,6 +51,8 @@ int show_adj_route_vpn(struct vty *vty, struct peer *peer,
        if (bgp == NULL) {
                if (!use_json)
                        vty_out(vty, "No BGP process is configured\n");
+               else
+                       vty_out(vty, "{}\n");
                return CMD_WARNING;
        }
 
@@ -242,9 +244,8 @@ int show_adj_route_vpn(struct vty *vty, struct peer *peer,
        }
        if (use_json) {
                json_object_object_add(json, "routes", json_routes);
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
        return CMD_SUCCESS;
index 353a3425a24da223fcbfd0929622e95d4407cc84..65a1473f75ef4b4e3e7d78213ab96f7a477b027b 100644 (file)
@@ -1470,8 +1470,7 @@ DEFUN (no_bgp_maxpaths,
 }
 
 ALIAS_HIDDEN(no_bgp_maxpaths, no_bgp_maxpaths_hidden_cmd,
-            "no maximum-paths [" CMD_RANGE_STR(1, MULTIPATH_NUM) "]",
-            NO_STR
+            "no maximum-paths [" CMD_RANGE_STR(1, MULTIPATH_NUM) "]", NO_STR
             "Forward packets over multiple paths\n"
             "Number of paths\n")
 
@@ -4202,8 +4201,15 @@ DEFUN (neighbor_attr_unchanged,
        "Med attribute\n")
 {
        int idx = 0;
-       char *peer = argv[1]->arg;
+       char *peer_str = argv[1]->arg;
+       struct peer *peer;
        u_int16_t flags = 0;
+       afi_t afi = bgp_node_afi(vty);
+       safi_t safi = bgp_node_safi(vty);
+
+       peer = peer_and_group_lookup_vty(vty, peer_str);
+       if (!peer)
+               return CMD_WARNING_CONFIG_FAILED;
 
        if (argv_find(argv, argc, "as-path", &idx))
                SET_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED);
@@ -4214,15 +4220,35 @@ DEFUN (neighbor_attr_unchanged,
        if (argv_find(argv, argc, "med", &idx))
                SET_FLAG(flags, PEER_FLAG_MED_UNCHANGED);
 
-       if (!flags) // no flags means all of them!
-       {
+       /* no flags means all of them! */
+       if (!flags) {
                SET_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED);
                SET_FLAG(flags, PEER_FLAG_NEXTHOP_UNCHANGED);
                SET_FLAG(flags, PEER_FLAG_MED_UNCHANGED);
+       } else {
+               if (!CHECK_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED) &&
+                   peer_af_flag_check(peer, afi, safi,
+                                      PEER_FLAG_AS_PATH_UNCHANGED)) {
+                       peer_af_flag_unset_vty(vty, peer_str, afi, safi,
+                                              PEER_FLAG_AS_PATH_UNCHANGED);
+               }
+
+               if (!CHECK_FLAG(flags, PEER_FLAG_NEXTHOP_UNCHANGED) &&
+                   peer_af_flag_check(peer, afi, safi,
+                                      PEER_FLAG_NEXTHOP_UNCHANGED)) {
+                       peer_af_flag_unset_vty(vty, peer_str, afi, safi,
+                                              PEER_FLAG_NEXTHOP_UNCHANGED);
+               }
+
+               if (!CHECK_FLAG(flags, PEER_FLAG_MED_UNCHANGED) &&
+                   peer_af_flag_check(peer, afi, safi,
+                                      PEER_FLAG_MED_UNCHANGED)) {
+                       peer_af_flag_unset_vty(vty, peer_str, afi, safi,
+                                              PEER_FLAG_MED_UNCHANGED);
+               }
        }
 
-       return peer_af_flag_set_vty(vty, peer, bgp_node_afi(vty),
-                                   bgp_node_safi(vty), flags);
+       return peer_af_flag_set_vty(vty, peer_str, afi, safi, flags);
 }
 
 ALIAS_HIDDEN(
@@ -6377,9 +6403,8 @@ DEFUN (show_bgp_vrfs,
 
                json_object_int_add(json, "totalVrfs", count);
 
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                if (count)
@@ -6473,20 +6498,17 @@ DEFUN (show_bgp_memory,
        /* Other attributes */
        if ((count = community_count()))
                vty_out(vty, "%ld BGP community entries, using %s of memory\n",
-                       count,
-                       mtype_memstr(memstrbuf, sizeof(memstrbuf),
-                                    count * sizeof(struct community)));
+                       count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
+                                           count * sizeof(struct community)));
        if ((count = mtype_stats_alloc(MTYPE_ECOMMUNITY)))
                vty_out(vty, "%ld BGP community entries, using %s of memory\n",
-                       count,
-                       mtype_memstr(memstrbuf, sizeof(memstrbuf),
-                                    count * sizeof(struct ecommunity)));
+                       count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
+                                           count * sizeof(struct ecommunity)));
        if ((count = mtype_stats_alloc(MTYPE_LCOMMUNITY)))
                vty_out(vty,
                        "%ld BGP large-community entries, using %s of memory\n",
-                       count,
-                       mtype_memstr(memstrbuf, sizeof(memstrbuf),
-                                    count * sizeof(struct lcommunity)));
+                       count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
+                                           count * sizeof(struct lcommunity)));
 
        if ((count = mtype_stats_alloc(MTYPE_CLUSTER)))
                vty_out(vty, "%ld Cluster lists, using %s of memory\n", count,
@@ -6515,9 +6537,8 @@ DEFUN (show_bgp_memory,
                                     count * sizeof(struct hash_backet)));
        if ((count = mtype_stats_alloc(MTYPE_BGP_REGEXP)))
                vty_out(vty, "%ld compiled regexes, using %s of memory\n",
-                       count,
-                       mtype_memstr(memstrbuf, sizeof(memstrbuf),
-                                    count * sizeof(regex_t)));
+                       count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
+                                           count * sizeof(regex_t)));
        return CMD_SUCCESS;
 }
 
@@ -6742,9 +6763,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
                                                        ents);
                                                json_object_int_add(
                                                        json, "peerGroupMemory",
-                                                       ents
-                                                               * sizeof(struct
-                                                                        peer_group));
+                                                       ents * sizeof(struct
+                                                                     peer_group));
                                        }
 
                                        if (CHECK_FLAG(bgp->af_flags[afi][safi],
@@ -6775,9 +6795,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
                                                mtype_memstr(
                                                        memstrbuf,
                                                        sizeof(memstrbuf),
-                                                       ents
-                                                               * sizeof(struct
-                                                                        bgp_node)));
+                                                       ents * sizeof(struct
+                                                                     bgp_node)));
 
                                        /* Peer related usage */
                                        ents = listcount(bgp->peer);
@@ -6787,9 +6806,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
                                                mtype_memstr(
                                                        memstrbuf,
                                                        sizeof(memstrbuf),
-                                                       ents
-                                                               * sizeof(struct
-                                                                        peer)));
+                                                       ents * sizeof(struct
+                                                                     peer)));
 
                                        if ((ents = listcount(bgp->group)))
                                                vty_out(vty,
@@ -6798,9 +6816,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
                                                        mtype_memstr(
                                                                memstrbuf,
                                                                sizeof(memstrbuf),
-                                                               ents
-                                                                       * sizeof(struct
-                                                                                peer_group)));
+                                                               ents * sizeof(struct
+                                                                             peer_group)));
 
                                        if (CHECK_FLAG(bgp->af_flags[afi][safi],
                                                       BGP_CONFIG_DAMPENING))
@@ -6918,9 +6935,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
                                        vty_out(vty, "%*s",
                                                max_neighbor_width - len, " ");
 
-                               vty_out(vty,
-                                       "4 %10u %7d %7d %8" PRIu64
-                                       " %4d %4zd %8s",
+                               vty_out(vty, "4 %10u %7d %7d %8" PRIu64
+                                            " %4d %4zd %8s",
                                        peer->as,
                                        peer->open_in + peer->update_in
                                                + peer->keepalive_in
@@ -6968,9 +6984,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
                json_object_int_add(json, "totalPeers", count);
                json_object_int_add(json, "dynamicPeers", dn_count);
 
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                if (count)
@@ -7065,9 +7080,10 @@ static void bgp_show_summary_afi_safi(struct vty *vty, struct bgp *bgp, int afi,
                        }
                        safi++;
                        if (safi == SAFI_RESERVED_4
-                           || safi == SAFI_RESERVED_5) /* handle special
-                                                          cases to match
-                                                          zebra.h */
+                           || safi
+                                      == SAFI_RESERVED_5) /* handle special
+                                                             cases to match
+                                                             zebra.h */
                                safi++;
                        if (!safi_wildcard)
                                safi = SAFI_MAX;
@@ -7626,9 +7642,8 @@ static void bgp_show_peer_afi(struct vty *vty, struct peer *p, afi_t afi,
 
                paf = peer_af_find(p, afi, safi);
                if (paf && PAF_SUBGRP(paf)) {
-                       vty_out(vty,
-                               "  Update group %" PRIu64 ", subgroup %" PRIu64
-                               "\n",
+                       vty_out(vty, "  Update group %" PRIu64
+                                    ", subgroup %" PRIu64 "\n",
                                PAF_UPDGRP(paf)->id, PAF_SUBGRP(paf)->id);
                        vty_out(vty, "  Packet Queue length %d\n",
                                bpacket_queue_virtual_length(paf));
@@ -9394,9 +9409,8 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
                        } else
                                vty_out(vty,
                                        "  Reduce the no. of prefix from %s, will restart in %ld seconds\n",
-                                       p->host,
-                                       thread_timer_remain_second(
-                                               p->t_pmax_restart));
+                                       p->host, thread_timer_remain_second(
+                                                        p->t_pmax_restart));
                } else {
                        if (use_json)
                                json_object_boolean_true_add(
@@ -9636,9 +9650,8 @@ static int bgp_show_neighbor(struct vty *vty, struct bgp *bgp,
        }
 
        if (use_json) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                vty_out(vty, "\n");
@@ -11093,45 +11106,31 @@ int bgp_config_write_redistribute(struct vty *vty, struct bgp *bgp, afi_t afi,
 
 /* BGP node structure. */
 static struct cmd_node bgp_node = {
-       BGP_NODE,
-       "%s(config-router)# ",
-       1,
+       BGP_NODE, "%s(config-router)# ", 1,
 };
 
 static struct cmd_node bgp_ipv4_unicast_node = {
-       BGP_IPV4_NODE,
-       "%s(config-router-af)# ",
-       1,
+       BGP_IPV4_NODE, "%s(config-router-af)# ", 1,
 };
 
 static struct cmd_node bgp_ipv4_multicast_node = {
-       BGP_IPV4M_NODE,
-       "%s(config-router-af)# ",
-       1,
+       BGP_IPV4M_NODE, "%s(config-router-af)# ", 1,
 };
 
 static struct cmd_node bgp_ipv4_labeled_unicast_node = {
-       BGP_IPV4L_NODE,
-       "%s(config-router-af)# ",
-       1,
+       BGP_IPV4L_NODE, "%s(config-router-af)# ", 1,
 };
 
 static struct cmd_node bgp_ipv6_unicast_node = {
-       BGP_IPV6_NODE,
-       "%s(config-router-af)# ",
-       1,
+       BGP_IPV6_NODE, "%s(config-router-af)# ", 1,
 };
 
 static struct cmd_node bgp_ipv6_multicast_node = {
-       BGP_IPV6M_NODE,
-       "%s(config-router-af)# ",
-       1,
+       BGP_IPV6M_NODE, "%s(config-router-af)# ", 1,
 };
 
 static struct cmd_node bgp_ipv6_labeled_unicast_node = {
-       BGP_IPV6L_NODE,
-       "%s(config-router-af)# ",
-       1,
+       BGP_IPV6L_NODE, "%s(config-router-af)# ", 1,
 };
 
 static struct cmd_node bgp_vpnv4_node = {BGP_VPNV4_NODE,
index be3c6eea3a2418a305de3a0807866b8dbc7c97e7..4870e54aec991b390db1021877aff58464dbc433 100644 (file)
@@ -269,8 +269,6 @@ static int bgp_interface_delete(int command, struct zclient *zclient,
        if (!ifp) /* This may happen if we've just unregistered for a VRF. */
                return 0;
 
-       ifp->ifindex = IFINDEX_DELETED;
-
        if (BGP_DEBUG(zebra, ZEBRA))
                zlog_debug("Rx Intf del VRF %u IF %s", vrf_id, ifp->name);
 
@@ -279,6 +277,8 @@ static int bgp_interface_delete(int command, struct zclient *zclient,
                return 0;
 
        bgp_update_interface_nbrs(bgp, ifp, NULL);
+
+       ifp->ifindex = IFINDEX_DELETED;
        return 0;
 }
 
@@ -621,12 +621,10 @@ static int zebra_read_ipv4(int command, struct zclient *zclient,
                        zlog_debug(
                                "Rx IPv4 route add VRF %u %s[%d] %s/%d nexthop %s metric %u tag %" ROUTE_TAG_PRI,
                                vrf_id, zebra_route_string(api.type),
-                               api.instance,
-                               inet_ntop(AF_INET, &p.prefix, buf[0],
-                                         sizeof(buf[0])),
-                               p.prefixlen,
-                               inet_ntop(AF_INET, &nexthop, buf[1],
-                                         sizeof(buf[1])),
+                               api.instance, inet_ntop(AF_INET, &p.prefix,
+                                                       buf[0], sizeof(buf[0])),
+                               p.prefixlen, inet_ntop(AF_INET, &nexthop,
+                                                      buf[1], sizeof(buf[1])),
                                api.metric, api.tag);
                }
 
@@ -657,12 +655,10 @@ static int zebra_read_ipv4(int command, struct zclient *zclient,
                                "Rx IPv4 route delete VRF %u %s[%d] %s/%d "
                                "nexthop %s metric %u tag %" ROUTE_TAG_PRI,
                                vrf_id, zebra_route_string(api.type),
-                               api.instance,
-                               inet_ntop(AF_INET, &p.prefix, buf[0],
-                                         sizeof(buf[0])),
-                               p.prefixlen,
-                               inet_ntop(AF_INET, &nexthop, buf[1],
-                                         sizeof(buf[1])),
+                               api.instance, inet_ntop(AF_INET, &p.prefix,
+                                                       buf[0], sizeof(buf[0])),
+                               p.prefixlen, inet_ntop(AF_INET, &nexthop,
+                                                      buf[1], sizeof(buf[1])),
                                api.metric, api.tag);
                }
                bgp_redistribute_delete(bgp, (struct prefix *)&p, api.type,
@@ -752,12 +748,10 @@ static int zebra_read_ipv6(int command, struct zclient *zclient,
                        zlog_debug(
                                "Rx IPv6 route add VRF %u %s[%d] %s/%d nexthop %s metric %u tag %" ROUTE_TAG_PRI,
                                vrf_id, zebra_route_string(api.type),
-                               api.instance,
-                               inet_ntop(AF_INET6, &p.prefix, buf[0],
-                                         sizeof(buf[0])),
-                               p.prefixlen,
-                               inet_ntop(AF_INET, &nexthop, buf[1],
-                                         sizeof(buf[1])),
+                               api.instance, inet_ntop(AF_INET6, &p.prefix,
+                                                       buf[0], sizeof(buf[0])),
+                               p.prefixlen, inet_ntop(AF_INET, &nexthop,
+                                                      buf[1], sizeof(buf[1])),
                                api.metric, api.tag);
                }
 
@@ -787,12 +781,10 @@ static int zebra_read_ipv6(int command, struct zclient *zclient,
                                "Rx IPv6 route delete VRF %u %s[%d] %s/%d "
                                "nexthop %s metric %u tag %" ROUTE_TAG_PRI,
                                vrf_id, zebra_route_string(api.type),
-                               api.instance,
-                               inet_ntop(AF_INET6, &p.prefix, buf[0],
-                                         sizeof(buf[0])),
-                               p.prefixlen,
-                               inet_ntop(AF_INET6, &nexthop, buf[1],
-                                         sizeof(buf[1])),
+                               api.instance, inet_ntop(AF_INET6, &p.prefix,
+                                                       buf[0], sizeof(buf[0])),
+                               p.prefixlen, inet_ntop(AF_INET6, &nexthop,
+                                                      buf[1], sizeof(buf[1])),
                                api.metric, api.tag);
                }
                bgp_redistribute_delete(bgp, (struct prefix *)&p, api.type,
@@ -1324,9 +1316,8 @@ void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p,
                                "Tx IPv4 route %s VRF %u %s/%d metric %u tag %" ROUTE_TAG_PRI
                                " count %d",
                                (valid_nh_count ? "add" : "delete"),
-                               bgp->vrf_id,
-                               inet_ntop(AF_INET, &p->u.prefix4, buf[0],
-                                         sizeof(buf[0])),
+                               bgp->vrf_id, inet_ntop(AF_INET, &p->u.prefix4,
+                                                      buf[0], sizeof(buf[0])),
                                p->prefixlen, api.metric, api.tag,
                                api.nexthop_num);
                        for (i = 0; i < api.nexthop_num; i++) {
index 0c5b88d74d537c7ba4953d7e1da80468abdffd80..a0e2d6749a735064fe7b2a13c2eaf3d779e19977 100644 (file)
@@ -3886,9 +3886,8 @@ static int peer_af_flag_modify(struct peer *peer, afi_t afi, safi_t safi,
        }
 
        /* Track if addpath TX is in use */
-       if (flag
-           & (PEER_FLAG_ADDPATH_TX_ALL_PATHS
-              | PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS)) {
+       if (flag & (PEER_FLAG_ADDPATH_TX_ALL_PATHS
+                   | PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS)) {
                bgp = peer->bgp;
                addpath_tx_used = 0;
 
@@ -6758,9 +6757,8 @@ static void bgp_config_write_peer_af(struct vty *vty, struct bgp *bgp,
        } else {
                if (!peer_af_flag_check(peer, afi, safi,
                                        PEER_FLAG_SEND_COMMUNITY)
-                   && (!g_peer
-                       || peer_af_flag_check(g_peer, afi, safi,
-                                             PEER_FLAG_SEND_COMMUNITY))
+                   && (!g_peer || peer_af_flag_check(g_peer, afi, safi,
+                                                     PEER_FLAG_SEND_COMMUNITY))
                    && !peer_af_flag_check(peer, afi, safi,
                                           PEER_FLAG_SEND_EXT_COMMUNITY)
                    && (!g_peer
@@ -6768,10 +6766,9 @@ static void bgp_config_write_peer_af(struct vty *vty, struct bgp *bgp,
                                              PEER_FLAG_SEND_EXT_COMMUNITY))
                    && !peer_af_flag_check(peer, afi, safi,
                                           PEER_FLAG_SEND_LARGE_COMMUNITY)
-                   && (!g_peer
-                       || peer_af_flag_check(
-                                  g_peer, afi, safi,
-                                  PEER_FLAG_SEND_LARGE_COMMUNITY))) {
+                   && (!g_peer || peer_af_flag_check(
+                                          g_peer, afi, safi,
+                                          PEER_FLAG_SEND_LARGE_COMMUNITY))) {
                        afi_header_vty_out(
                                vty, afi, safi, write,
                                "  no neighbor %s send-community all\n", addr);
@@ -6802,10 +6799,9 @@ static void bgp_config_write_peer_af(struct vty *vty, struct bgp *bgp,
 
                        if (!peer_af_flag_check(peer, afi, safi,
                                                PEER_FLAG_SEND_COMMUNITY)
-                           && (!g_peer
-                               || peer_af_flag_check(
-                                          g_peer, afi, safi,
-                                          PEER_FLAG_SEND_COMMUNITY))) {
+                           && (!g_peer || peer_af_flag_check(
+                                                  g_peer, afi, safi,
+                                                  PEER_FLAG_SEND_COMMUNITY))) {
                                afi_header_vty_out(
                                        vty, afi, safi, write,
                                        "  no neighbor %s send-community\n",
@@ -6930,36 +6926,34 @@ static void bgp_config_write_peer_af(struct vty *vty, struct bgp *bgp,
        bgp_config_write_filter(vty, peer, afi, safi, write);
 
        /* atribute-unchanged. */
-       if (CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_AS_PATH_UNCHANGED)
-           || CHECK_FLAG(peer->af_flags[afi][safi],
-                         PEER_FLAG_NEXTHOP_UNCHANGED)
-           || CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_MED_UNCHANGED)) {
-               if (peergroup_af_flag_check(peer, afi, safi,
-                                           PEER_FLAG_AS_PATH_UNCHANGED)
-                   && peergroup_af_flag_check(peer, afi, safi,
-                                              PEER_FLAG_NEXTHOP_UNCHANGED)
-                   && peergroup_af_flag_check(peer, afi, safi,
-                                              PEER_FLAG_MED_UNCHANGED)) {
-                       afi_header_vty_out(
-                               vty, afi, safi, write,
-                               "  neighbor %s attribute-unchanged\n", addr);
-               } else {
+       if (peer_af_flag_check(peer, afi, safi, PEER_FLAG_AS_PATH_UNCHANGED) ||
+           peer_af_flag_check(peer, afi, safi, PEER_FLAG_NEXTHOP_UNCHANGED) ||
+           peer_af_flag_check(peer, afi, safi, PEER_FLAG_MED_UNCHANGED)) {
+
+               if (!peer_group_active(peer) ||
+                    peergroup_af_flag_check(peer, afi, safi,
+                                            PEER_FLAG_AS_PATH_UNCHANGED) ||
+                    peergroup_af_flag_check(peer, afi, safi,
+                                            PEER_FLAG_NEXTHOP_UNCHANGED) ||
+                    peergroup_af_flag_check(peer, afi, safi,
+                                            PEER_FLAG_MED_UNCHANGED)) {
+
                        afi_header_vty_out(
                                vty, afi, safi, write,
                                "  neighbor %s attribute-unchanged%s%s%s\n",
                                addr,
-                               peergroup_af_flag_check(
+                               peer_af_flag_check(
                                        peer, afi, safi,
                                        PEER_FLAG_AS_PATH_UNCHANGED)
                                        ? " as-path"
                                        : "",
-                               peergroup_af_flag_check(
+                               peer_af_flag_check(
                                        peer, afi, safi,
                                        PEER_FLAG_NEXTHOP_UNCHANGED)
                                        ? " next-hop"
                                        : "",
-                               peergroup_af_flag_check(peer, afi, safi,
-                                                       PEER_FLAG_MED_UNCHANGED)
+                               peer_af_flag_check(peer, afi, safi,
+                                                  PEER_FLAG_MED_UNCHANGED)
                                        ? " med"
                                        : "");
                }
index c6c14420e69fa006289ba85ae77aa66f5ae6fb4e..67b8289c70bccbeddb890c88ff21b9cab2de3fc0 100644 (file)
@@ -251,14 +251,13 @@ struct bgp {
                               /* $FRR indent$ */
                               /* clang-format off */
 #define BGP_MAXMED_ADMIN_UNCONFIGURED  0 /* Off by default */
-       u_int32_t maxmed_admin_value; /* Max-med value when administrative in on
+       u_int32_t
+               maxmed_admin_value; /* Max-med value when administrative in on
                                       */
-                                     /* $FRR indent$ */
-                                     /* clang-format off */
 #define BGP_MAXMED_VALUE_DEFAULT  4294967294 /* Maximum by default */
 
-       u_char maxmed_active;    /* 1/0 if max-med is active or not */
-       u_int32_t maxmed_value;       /* Max-med value when its active */
+       u_char maxmed_active;   /* 1/0 if max-med is active or not */
+       u_int32_t maxmed_value; /* Max-med value when its active */
 
        /* BGP update delay on startup */
        struct thread *t_update_delay;
index ba4c703e96290bec61416eb57700390ea802cdb2..c8e2dd95254eddd31f34070036d3c2544c421061 100644 (file)
@@ -135,10 +135,10 @@ struct rfapi_nve_group_cfg *bgp_rfapi_cfg_match_group(struct rfapi_cfg *hc,
 
        switch (vn->family) {
        case AF_INET:
-               rt_vn = &(hc->nve_groups_vn[AFI_IP]);
+               rt_vn = hc->nve_groups_vn[AFI_IP];
                break;
        case AF_INET6:
-               rt_vn = &(hc->nve_groups_vn[AFI_IP6]);
+               rt_vn = hc->nve_groups_vn[AFI_IP6];
                break;
        default:
                return NULL;
@@ -146,10 +146,10 @@ struct rfapi_nve_group_cfg *bgp_rfapi_cfg_match_group(struct rfapi_cfg *hc,
 
        switch (un->family) {
        case AF_INET:
-               rt_un = &(hc->nve_groups_un[AFI_IP]);
+               rt_un = hc->nve_groups_un[AFI_IP];
                break;
        case AF_INET6:
-               rt_un = &(hc->nve_groups_un[AFI_IP6]);
+               rt_un = hc->nve_groups_un[AFI_IP6];
                break;
        default:
                return NULL;
@@ -503,8 +503,9 @@ DEFUN (vnc_defaults_responselifetime,
        } else {
                rspint = strtoul(argv[1]->arg, NULL, 10);
                if (rspint > INT32_MAX)
-                       rspint = INT32_MAX; /* is really an int, not an unsigned
-                                              int */
+                       rspint =
+                               INT32_MAX; /* is really an int, not an unsigned
+                                             int */
        }
 
        bgp->rfapi_cfg->default_response_lifetime = rspint;
@@ -1673,9 +1674,8 @@ DEFUN (vnc_nve_group_export_no_prefixlist,
        }
 
        if (argv[2]->arg[0] == 'b') {
-               if (((argc > 5)
-                    && strmatch(argv[5]->text,
-                                rfg->plist_export_bgp_name[afi]))
+               if (((argc > 5) && strmatch(argv[5]->text,
+                                           rfg->plist_export_bgp_name[afi]))
                    || (argc <= 5)) {
 
                        if (rfg->plist_export_bgp_name[afi])
@@ -1686,9 +1686,8 @@ DEFUN (vnc_nve_group_export_no_prefixlist,
                        vnc_direct_bgp_reexport_group_afi(bgp, rfg, afi);
                }
        } else {
-               if (((argc > 5)
-                    && strmatch(argv[5]->text,
-                                rfg->plist_export_zebra_name[afi]))
+               if (((argc > 5) && strmatch(argv[5]->text,
+                                           rfg->plist_export_zebra_name[afi]))
                    || (argc <= 5)) {
                        if (rfg->plist_export_zebra_name[afi])
                                free(rfg->plist_export_zebra_name[afi]);
@@ -1792,9 +1791,8 @@ DEFUN (vnc_nve_group_export_no_routemap,
                        vnc_direct_bgp_reexport_group_afi(bgp, rfg, AFI_IP6);
                }
        } else {
-               if (((argc > 4)
-                    && strmatch(argv[4]->text,
-                                rfg->routemap_export_zebra_name))
+               if (((argc > 4) && strmatch(argv[4]->text,
+                                           rfg->routemap_export_zebra_name))
                    || (argc <= 4)) {
                        if (rfg->routemap_export_zebra_name)
                                free(rfg->routemap_export_zebra_name);
@@ -2447,9 +2445,8 @@ bgp_rfapi_delete_named_nve_group(struct vty *vty, /* NULL = no output */
         */
        for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_direct_bgp_l, node,
                                  rfgn)) {
-               if (rfg_name == NULL
-                   || (type == RFAPI_GROUP_CFG_NVE
-                       && !strcmp(rfgn->name, rfg_name))) {
+               if (rfg_name == NULL || (type == RFAPI_GROUP_CFG_NVE
+                                        && !strcmp(rfgn->name, rfg_name))) {
                        rfgn->rfg = NULL;
                        /* remove exported routes from this group */
                        vnc_direct_bgp_del_group(bgp, rfg);
@@ -2463,9 +2460,8 @@ bgp_rfapi_delete_named_nve_group(struct vty *vty, /* NULL = no output */
        for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_zebra_l, node,
                                  rfgn)) {
 
-               if (rfg_name == NULL
-                   || (type == RFAPI_GROUP_CFG_NVE
-                       && !strcmp(rfgn->name, rfg_name))) {
+               if (rfg_name == NULL || (type == RFAPI_GROUP_CFG_NVE
+                                        && !strcmp(rfgn->name, rfg_name))) {
                        rfgn->rfg = NULL;
                        /* remove exported routes from this group */
                        vnc_zebra_del_group(bgp, rfg);
@@ -2507,7 +2503,7 @@ DEFUN (vnc_nve_group_prefix,
        VTY_DECLVAR_CONTEXT(bgp, bgp);
        VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
        struct prefix p;
-       int afi;
+       afi_t afi;
        struct route_table *rt;
        struct route_node *rn;
        int is_un_prefix = 0;
@@ -2531,10 +2527,10 @@ DEFUN (vnc_nve_group_prefix,
        }
 
        if (argv[1]->arg[0] == 'u') {
-               rt = &(bgp->rfapi_cfg->nve_groups_un[afi]);
+               rt = bgp->rfapi_cfg->nve_groups_un[afi];
                is_un_prefix = 1;
        } else {
-               rt = &(bgp->rfapi_cfg->nve_groups_vn[afi]);
+               rt = bgp->rfapi_cfg->nve_groups_vn[afi];
        }
 
        rn = route_node_get(rt, &p); /* NB locks node */
@@ -3834,7 +3830,7 @@ void bgp_rfapi_cfg_init(void)
 struct rfapi_cfg *bgp_rfapi_cfg_new(struct rfapi_rfp_cfg *cfg)
 {
        struct rfapi_cfg *h;
-       int afi;
+       afi_t afi;
 
        h = (struct rfapi_cfg *)XCALLOC(MTYPE_RFAPI_CFG,
                                        sizeof(struct rfapi_cfg));
@@ -3842,14 +3838,9 @@ struct rfapi_cfg *bgp_rfapi_cfg_new(struct rfapi_rfp_cfg *cfg)
 
        h->nve_groups_sequential = list_new();
        assert(h->nve_groups_sequential);
-
        for (afi = AFI_IP; afi < AFI_MAX; afi++) {
-               /* ugly, to deal with addition of delegates, part of 0.99.24.1
-                * merge */
-               h->nve_groups_vn[afi].delegate =
-                       route_table_get_default_delegate();
-               h->nve_groups_un[afi].delegate =
-                       route_table_get_default_delegate();
+               h->nve_groups_vn[afi] = route_table_init();
+               h->nve_groups_un[afi] = route_table_init();
        }
        h->default_response_lifetime =
                BGP_VNC_DEFAULT_RESPONSE_LIFETIME_DEFAULT;
@@ -3889,6 +3880,7 @@ struct rfapi_cfg *bgp_rfapi_cfg_new(struct rfapi_rfp_cfg *cfg)
 
 void bgp_rfapi_cfg_destroy(struct bgp *bgp, struct rfapi_cfg *h)
 {
+       afi_t afi;
        if (h == NULL)
                return;
 
@@ -3905,6 +3897,10 @@ void bgp_rfapi_cfg_destroy(struct bgp *bgp, struct rfapi_cfg *h)
                ecommunity_free(&h->default_rt_import_list);
        if (h->default_rfp_cfg)
                XFREE(MTYPE_RFAPI_RFP_GROUP_CFG, h->default_rfp_cfg);
+       for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+               route_table_finish(h->nve_groups_vn[afi]);
+               route_table_finish(h->nve_groups_un[afi]);
+       }
        XFREE(MTYPE_RFAPI_CFG, h);
 }
 
@@ -4575,7 +4571,8 @@ int bgp_rfapi_cfg_write(struct vty *vty, struct bgp *bgp)
 void bgp_rfapi_show_summary(struct bgp *bgp, struct vty *vty)
 {
        struct rfapi_cfg *hc = bgp->rfapi_cfg;
-       int afi, type, redist = 0;
+       afi_t afi;
+       int type, redist = 0;
        char tmp[40];
        if (hc == NULL)
                return;
index d99aefa60ddefb7cc8bb074a96ebc67a8ecc9bff..a11b0992fa9343052f6565a2760f3b930ff88ef1 100644 (file)
@@ -135,8 +135,8 @@ struct rfapi_cfg {
        struct list *l2_groups; /* rfapi_l2_group_cfg list */
        /* three views into the same collection of rfapi_nve_group_cfg */
        struct list *nve_groups_sequential;
-       struct route_table nve_groups_vn[AFI_MAX];
-       struct route_table nve_groups_un[AFI_MAX];
+       struct route_table *nve_groups_vn[AFI_MAX];
+       struct route_table *nve_groups_un[AFI_MAX];
 
        /*
         * For Single VRF export to ordinary routing protocols. This is
index f8096211236f91ddd707edc0c6a943412be49514..ab71eda126d5ed1abf2a29318c5713bb55e9fc6a 100644 (file)
@@ -205,7 +205,7 @@ static int rfapi_find_node(struct bgp *bgp, struct rfapi_ip_addr *vn_addr,
        struct prefix p;
        struct route_node *rn;
        int rc;
-       int afi;
+       afi_t afi;
 
        if (!bgp) {
                return ENXIO;
@@ -224,7 +224,7 @@ static int rfapi_find_node(struct bgp *bgp, struct rfapi_ip_addr *vn_addr,
        if ((rc = rfapiRaddr2Qprefix(un_addr, &p)))
                return rc;
 
-       rn = route_node_lookup(&h->un[afi], &p);
+       rn = route_node_lookup(h->un[afi], &p);
 
        if (!rn)
                return ENOENT;
@@ -1415,7 +1415,7 @@ int rfapi_init_and_open(struct bgp *bgp, struct rfapi_descriptor *rfd,
                assert(afi_vn && afi_un);
                assert(!rfapiRaddr2Qprefix(&rfd->un_addr, &pfx_un));
 
-               rn = route_node_get(&(h->un[afi_un]), &pfx_un);
+               rn = route_node_get(h->un[afi_un], &pfx_un);
                assert(rn);
                rfd->next = rn->info;
                rn->info = rfd;
@@ -2367,7 +2367,7 @@ int rfapi_register(void *handle, struct rfapi_ip_prefix *prefix,
        struct prefix p;
        struct prefix *pfx_ip = NULL;
        struct prefix_rd prd;
-       int afi;
+       afi_t afi;
        struct prefix pfx_mac_buf;
        struct prefix *pfx_mac = NULL;
        struct prefix pfx_vn_buf;
@@ -2603,9 +2603,8 @@ int rfapi_register(void *handle, struct rfapi_ip_prefix *prefix,
                        ZEBRA_ROUTE_BGP, BGP_ROUTE_RFP, NULL,
                        action == RFAPI_REGISTER_KILL);
 
-               if (0
-                   == rfapiApDelete(bgp, rfd, &p, pfx_mac, &prd,
-                                    &adv_tunnel)) {
+               if (0 == rfapiApDelete(bgp, rfd, &p, pfx_mac, &prd,
+                                      &adv_tunnel)) {
                        if (adv_tunnel)
                                rfapiTunnelRouteAnnounce(
                                        bgp, rfd, &rfd->max_prefix_lifetime);
index d16d578ac8ed090b472315e4c202629d1417de59..0bbbe12ccef3c4e302d674b29e030c75435e02ca 100644 (file)
@@ -1,22 +1,22 @@
 /*
- *
- * Copyright 2009-2016, LabN Consulting, L.L.C.
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; see the file COPYING; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
+*
+* Copyright 2009-2016, LabN Consulting, L.L.C.
+*
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program; see the file COPYING; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
 
 /*
  * File:       rfapi_import.c
@@ -1086,8 +1086,9 @@ int rfapiEcommunityGetEthernetTag(struct ecommunity *ecom, uint16_t *tag_id)
                                } else if (encode == ECOMMUNITY_ENCODE_AS) {
                                        as = (*p++ << 8);
                                        as |= (*p++);
-                                       p += 2; /* skip next two, tag/vid
-                                                  always in lowest bytes */
+                                       p +=
+                                               2; /* skip next two, tag/vid
+                                                     always in lowest bytes */
                                }
                                if (as == bgp->as) {
                                        *tag_id = *p++ << 8;
@@ -2010,9 +2011,8 @@ static void rfapiBgpInfoAttachSorted(struct route_node *rn,
 
        for (prev = NULL, next = rn->info; next;
             prev = next, next = next->next) {
-               if (!bgp
-                   || (!CHECK_FLAG(info_new->flags, BGP_INFO_REMOVED)
-                       && CHECK_FLAG(next->flags, BGP_INFO_REMOVED))
+               if (!bgp || (!CHECK_FLAG(info_new->flags, BGP_INFO_REMOVED)
+                            && CHECK_FLAG(next->flags, BGP_INFO_REMOVED))
                    || bgp_info_cmp_compatible(bgp, info_new, next, pfx_buf,
                                               afi, safi)
                               == -1) { /* -1 if 1st is better */
@@ -3554,10 +3554,9 @@ void rfapiBgpInfoFilteredImportVPN(
 
                                vnc_zlog_debug_verbose(
                                        "%s: withdrawing at prefix %s/%d%s",
-                                       __func__,
-                                       rfapi_ntop(rn->p.family,
-                                                  &rn->p.u.prefix, buf,
-                                                  BUFSIZ),
+                                       __func__, rfapi_ntop(rn->p.family,
+                                                            &rn->p.u.prefix,
+                                                            buf, BUFSIZ),
                                        rn->p.prefixlen,
                                        (washolddown
                                                 ? " (already being withdrawn)"
@@ -4024,7 +4023,7 @@ void rfapiProcessWithdraw(struct peer *peer, void *rfd, struct prefix *p,
                                p,                       /* aux_prefix: IP */
                                AFI_L2VPN, prd, attr, type, 0,
                                NULL); /* sub_type & label unused for withdraw
-                                       */
+                                         */
                }
        }
 
@@ -4249,7 +4248,7 @@ static void rfapiBgpTableFilteredImport(struct bgp *bgp,
 struct rfapi *bgp_rfapi_new(struct bgp *bgp)
 {
        struct rfapi *h;
-       int afi;
+       afi_t afi;
        struct rfapi_rfp_cfg *cfg = NULL;
        struct rfapi_rfp_cb_methods *cbm = NULL;
 
@@ -4258,9 +4257,7 @@ struct rfapi *bgp_rfapi_new(struct bgp *bgp)
        h = (struct rfapi *)XCALLOC(MTYPE_RFAPI, sizeof(struct rfapi));
 
        for (afi = AFI_IP; afi < AFI_MAX; afi++) {
-               /* ugly, to deal with addition of delegates, part of 0.99.24.1
-                * merge */
-               h->un[afi].delegate = route_table_get_default_delegate();
+               h->un[afi] = route_table_init();
        }
 
        /*
@@ -4293,6 +4290,8 @@ struct rfapi *bgp_rfapi_new(struct bgp *bgp)
 
 void bgp_rfapi_destroy(struct bgp *bgp, struct rfapi *h)
 {
+       afi_t afi;
+
        if (bgp == NULL || h == NULL)
                return;
 
@@ -4311,8 +4310,9 @@ void bgp_rfapi_destroy(struct bgp *bgp, struct rfapi *h)
                void *cursor;
                int rc;
 
-               for (cursor = NULL, rc = skiplist_next(h->import_mac, NULL,
-                                                      (void **)&it, &cursor);
+               for (cursor = NULL,
+                   rc = skiplist_next(h->import_mac, NULL, (void **)&it,
+                                      &cursor);
                     !rc; rc = skiplist_next(h->import_mac, NULL, (void **)&it,
                                             &cursor)) {
 
@@ -4327,6 +4327,11 @@ void bgp_rfapi_destroy(struct bgp *bgp, struct rfapi *h)
 
        if (h->rfp != NULL)
                rfp_stop(h->rfp);
+
+       for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+               route_table_finish(h->un[afi]);
+       }
+
        XFREE(MTYPE_RFAPI_IMPORTTABLE, h->it_ce);
        XFREE(MTYPE_RFAPI, h);
 }
@@ -4711,8 +4716,9 @@ void rfapiDeleteRemotePrefixes(struct prefix *un, struct prefix *vn,
                void *cursor = NULL;
                int rc;
 
-               for (cursor = NULL, rc = skiplist_next(h->import_mac, NULL,
-                                                      (void **)&it, &cursor);
+               for (cursor = NULL,
+                   rc = skiplist_next(h->import_mac, NULL, (void **)&it,
+                                      &cursor);
                     !rc; rc = skiplist_next(h->import_mac, NULL, (void **)&it,
                                             &cursor)) {
 
@@ -4805,8 +4811,9 @@ void rfapiCountAllItRoutes(int *pALRcount, /* active local routes */
        int rc;
 
        if (h->import_mac) {
-               for (cursor = NULL, rc = skiplist_next(h->import_mac, NULL,
-                                                      (void **)&it, &cursor);
+               for (cursor = NULL,
+                   rc = skiplist_next(h->import_mac, NULL, (void **)&it,
+                                      &cursor);
                     !rc; rc = skiplist_next(h->import_mac, NULL, (void **)&it,
                                             &cursor)) {
 
index 5a1b29e5985d5504ca46cf9514e73dbe04446aab..9c0d9da6ff916332e7a2208a58ab7b78ba7c5389 100644 (file)
@@ -1339,11 +1339,10 @@ struct route_node *rfapiMonitorEthAdd(struct bgp *bgp,
        {
                char buf[BUFSIZ];
 
-               vnc_zlog_debug_verbose("%s: LNI=%d: rfd=%p, pfx=%s", __func__,
-                                      logical_net_id, rfd,
-                                      rfapi_ntop(pfx_mac_buf.family,
-                                                 pfx_mac_buf.u.val, buf,
-                                                 BUFSIZ));
+               vnc_zlog_debug_verbose(
+                       "%s: LNI=%d: rfd=%p, pfx=%s", __func__, logical_net_id,
+                       rfd, rfapi_ntop(pfx_mac_buf.family, pfx_mac_buf.u.val,
+                                       buf, BUFSIZ));
        }
 
 
index e7a3e5aae3e34184f5e2ddf8f7bc1a984c77e8f2..73c9312a64d1799c6d7e91d5d3fe4f90fb574636 100644 (file)
@@ -171,7 +171,7 @@ struct rfapi_global_stats {
  * check vn address to get exact match.
  */
 struct rfapi {
-       struct route_table un[AFI_MAX];
+       struct route_table *un[AFI_MAX];
        struct rfapi_import_table *imports; /* IPv4, IPv6 */
        struct list descriptors;            /* debug & resolve-nve imports */
 
index 58da84ea32d7b501a535ce7657ae2bcdf7ae4812..791eb4c916ed09f0c8678c056cdd5e382d0f8b51 100644 (file)
@@ -527,11 +527,11 @@ void rfapiRibClear(struct rfapi_descriptor *rfd)
 
                                        struct rfapi_info *ri;
 
-                                       while (0
-                                              == skiplist_first(
-                                                         (struct skiplist *)
-                                                                 rn->info,
-                                                         NULL, (void **)&ri)) {
+                                       while (0 == skiplist_first(
+                                                           (struct skiplist *)
+                                                                   rn->info,
+                                                           NULL,
+                                                           (void **)&ri)) {
 
                                                rfapi_info_free(ri);
                                                skiplist_delete_first(
@@ -2236,9 +2236,12 @@ void rfapiRibShowResponsesSummary(void *stream)
        struct rfapi_descriptor *rfd;
        struct listnode *node;
 
-
        if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0)
                return;
+       if (!bgp) {
+               fp(out, "Unable to find default BGP instance\n");
+               return;
+       }
 
        fp(out, "%-24s ", "Responses: (Prefixes)");
        fp(out, "%-8s %-8u ", "Active:", bgp->rfapi->rib_prefix_count_total);
@@ -2388,6 +2391,11 @@ void rfapiRibShowResponses(void *stream, struct prefix *pfx_match,
 
        if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0)
                return;
+       if (!bgp) {
+               fp(out, "Unable to find default BGP instance\n");
+               return;
+       }
+
        /*
         * loop over NVEs
         */
@@ -2449,7 +2457,7 @@ void rfapiRibShowResponses(void *stream, struct prefix *pfx_match,
 #else
                                           "Remaining"
 #endif
-                                       );
+                                          );
                                }
                                if (!printednve) {
                                        char str_vn[BUFSIZ];
index 0fab2e70050b4a646db7b12a03f2d4c838e193b2..117d4fbfd4de27e766e69040a7f0d06092e3dccb 100644 (file)
@@ -2009,7 +2009,7 @@ void vnc_import_bgp_exterior_del_route(
                                                        bgp_info_unlock(info);
                                                        route_unlock_node(
                                                                rn); /* sl entry
-                                                                     */
+                                                                       */
                                                }
                                                if (skiplist_empty(
                                                            RFAPI_MONITOR_EXTERIOR(
index 69529c722e1ed7f4b8ad5fe00802313afb19a2a5..3075d4109fb0ece805e73fa14aed883676e73278 100644 (file)
@@ -375,9 +375,8 @@ static int vnc_zebra_read_ipv4(int command, struct zclient *zclient,
                                __func__, zebra_route_string(api.type),
                                inet_ntop(AF_INET, &p.prefix, buf[0],
                                          sizeof(buf[0])),
-                               p.prefixlen,
-                               inet_ntop(AF_INET, &nexthop, buf[1],
-                                         sizeof(buf[1])),
+                               p.prefixlen, inet_ntop(AF_INET, &nexthop,
+                                                      buf[1], sizeof(buf[1])),
                                api.metric);
                }
                vnc_redistribute_add((struct prefix *)&p, &nexthop, api.metric,
@@ -391,9 +390,8 @@ static int vnc_zebra_read_ipv4(int command, struct zclient *zclient,
                                __func__, zebra_route_string(api.type),
                                inet_ntop(AF_INET, &p.prefix, buf[0],
                                          sizeof(buf[0])),
-                               p.prefixlen,
-                               inet_ntop(AF_INET, &nexthop, buf[1],
-                                         sizeof(buf[1])),
+                               p.prefixlen, inet_ntop(AF_INET, &nexthop,
+                                                      buf[1], sizeof(buf[1])),
                                api.metric);
                }
                vnc_redistribute_delete((struct prefix *)&p, api.type);
index 4139daf3161554e0056f7035950b2823bd41e978..b25845c38a2af2588b0e4776318cd589eb8cc9d8 100644 (file)
@@ -17,6 +17,9 @@ CentOS 6 restrictions:
 - Zebra is unable to detect what bridge/vrf an interface is associcated
   with (IFLA_INFO_SLAVE_KIND does not exist in the kernel headers, you
   can use a newer kernel + headers to get this functionality)
+- frr_reload.py will not work, as this requires Python 2.7, and CentOS 6
+  only has 2.6.  You can install Python 2.7 via IUS, but it won't work
+  properly unless you compile and install the ipaddr package for it.
 
 Install required packages
 -------------------------
index 7f312d9808b9fcbdc8532fb666111af5d05f027a..2312cc6eddbc0064938171630b18b4e02551c743 100644 (file)
@@ -552,9 +552,8 @@ struct eigrp_interface *eigrp_if_lookup_recv_if(struct eigrp *eigrp,
 
                if (prefix_match(CONNECTED_PREFIX(ei->connected),
                                 (struct prefix *)&addr)) {
-                       if ((match == NULL)
-                           || (match->address->prefixlen
-                               < ei->address->prefixlen))
+                       if ((match == NULL) || (match->address->prefixlen
+                                               < ei->address->prefixlen))
                                match = ei;
                }
        }
index d593f5ceea2769ba27ba704773171613014a0f5e..4c99821d3c4b98ab8a5aca3e2c7820218621c785 100644 (file)
@@ -50,7 +50,7 @@
 #include "keychain.h"
 #include "distribute.h"
 #include "libfrr.h"
-//#include "routemap.h"
+#include "routemap.h"
 //#include "if_rmap.h"
 
 #include "eigrpd/eigrp_structs.h"
@@ -68,9 +68,7 @@
 
 /* eigprd privileges */
 zebra_capabilities_t _caps_p[] = {
-       ZCAP_NET_RAW,
-       ZCAP_BIND,
-       ZCAP_NET_ADMIN,
+       ZCAP_NET_RAW, ZCAP_BIND, ZCAP_NET_ADMIN,
 };
 
 struct zebra_privs_t eigrpd_privs = {
@@ -194,6 +192,11 @@ int main(int argc, char **argv, char **envp)
        prefix_list_add_hook(eigrp_distribute_update_all);
        prefix_list_delete_hook(eigrp_distribute_update_all);
 
+       /*
+        * XXX: This is just to get the CLI installed to suppress VTYSH errors.
+        * Routemaps in EIGRP are not yet functional.
+        */
+       route_map_init();
        /*eigrp_route_map_init();
          route_map_add_hook (eigrp_rmap_update);
          route_map_delete_hook (eigrp_rmap_update);*/
index 1cbd06df6c15386237759f3088be06336ba5e8f2..f20ec0ad12e581ed726900cdcd060b176d203653 100644 (file)
@@ -134,9 +134,8 @@ int eigrp_make_md5_digest(struct eigrp_interface *ei, struct stream *s,
                        MD5Update(&ctx, zeropad, 16 - strlen(key->string));
                if (backup_end > (EIGRP_HEADER_LEN + EIGRP_AUTH_MD5_TLV_SIZE)) {
                        MD5Update(&ctx,
-                                 ibuf
-                                         + (EIGRP_HEADER_LEN
-                                            + EIGRP_AUTH_MD5_TLV_SIZE),
+                                 ibuf + (EIGRP_HEADER_LEN
+                                         + EIGRP_AUTH_MD5_TLV_SIZE),
                                  backup_end - 20
                                          - (EIGRP_HEADER_LEN
                                             + EIGRP_AUTH_MD5_TLV_SIZE));
@@ -209,9 +208,8 @@ int eigrp_check_md5_digest(struct stream *s,
                        MD5Update(&ctx, zeropad, 16 - strlen(key->string));
                if (backup_end > (EIGRP_HEADER_LEN + EIGRP_AUTH_MD5_TLV_SIZE)) {
                        MD5Update(&ctx,
-                                 ibuf
-                                         + (EIGRP_HEADER_LEN
-                                            + EIGRP_AUTH_MD5_TLV_SIZE),
+                                 ibuf + (EIGRP_HEADER_LEN
+                                         + EIGRP_AUTH_MD5_TLV_SIZE),
                                  backup_end - 20
                                          - (EIGRP_HEADER_LEN
                                             + EIGRP_AUTH_MD5_TLV_SIZE));
@@ -328,9 +326,9 @@ int eigrp_write(struct thread *thread)
        struct listnode *node;
 #ifdef WANT_EIGRP_WRITE_FRAGMENT
        static u_int16_t ipid = 0;
-#endif  /* WANT_EIGRP_WRITE_FRAGMENT */
-       /* $FRR indent$ */
-       /* clang-format off */
+#endif /* WANT_EIGRP_WRITE_FRAGMENT */
+       /* $FRR indent$ */
+/* clang-format off */
 #define EIGRP_WRITE_IPHL_SHIFT 2
 
        eigrp->t_write = NULL;
index 0823201fec4e0e63c8196b03c0acae9a1091258d..b645ed198784babf9964edf5040c2e741d2a0c20 100644 (file)
@@ -644,9 +644,7 @@ static void route_set_metric_free(void *rule)
 
 /* Set metric rule structure. */
 static struct route_map_rule_cmd route_set_metric_cmd = {
-       "metric",
-       route_set_metric,
-       route_set_metric_compile,
+       "metric", route_set_metric, route_set_metric_compile,
        route_set_metric_free,
 };
 
@@ -778,8 +776,7 @@ DEFUN (no_match_metric,
 }
 
 ALIAS(no_match_metric, no_match_metric_val_cmd,
-      "no match metric <0-4294967295>",
-      NO_STR MATCH_STR
+      "no match metric <0-4294967295>", NO_STR MATCH_STR
       "Match metric of route\n"
       "Metric value\n")
 
@@ -842,8 +839,7 @@ DEFUN (no_match_ip_next_hop,
 }
 
 ALIAS(no_match_ip_next_hop, no_match_ip_next_hop_val_cmd,
-      "no match ip next-hop (<1-199>|<1300-2699>|WORD)",
-      NO_STR MATCH_STR IP_STR
+      "no match ip next-hop (<1-199>|<1300-2699>|WORD)", NO_STR MATCH_STR IP_STR
       "Match next-hop address of route\n"
       "IP access-list number\n"
       "IP access-list number (expanded range)\n"
@@ -881,8 +877,7 @@ DEFUN (no_match_ip_next_hop_prefix_list,
 
 ALIAS(no_match_ip_next_hop_prefix_list,
       no_match_ip_next_hop_prefix_list_val_cmd,
-      "no match ip next-hop prefix-list WORD",
-      NO_STR MATCH_STR IP_STR
+      "no match ip next-hop prefix-list WORD", NO_STR MATCH_STR IP_STR
       "Match next-hop address of route\n"
       "Match entries of prefix-lists\n"
       "IP prefix-list name\n")
@@ -916,8 +911,7 @@ DEFUN (no_match_ip_address,
 }
 
 ALIAS(no_match_ip_address, no_match_ip_address_val_cmd,
-      "no match ip address (<1-199>|<1300-2699>|WORD)",
-      NO_STR MATCH_STR IP_STR
+      "no match ip address (<1-199>|<1300-2699>|WORD)", NO_STR MATCH_STR IP_STR
       "Match address of route\n"
       "IP access-list number\n"
       "IP access-list number (expanded range)\n"
@@ -954,8 +948,7 @@ DEFUN (no_match_ip_address_prefix_list,
 }
 
 ALIAS(no_match_ip_address_prefix_list, no_match_ip_address_prefix_list_val_cmd,
-      "no match ip address prefix-list WORD",
-      NO_STR MATCH_STR IP_STR
+      "no match ip address prefix-list WORD", NO_STR MATCH_STR IP_STR
       "Match address of route\n"
       "Match entries of prefix-lists\n"
       "IP prefix-list name\n")
@@ -1000,8 +993,7 @@ DEFUN (set_metric,
        return eigrp_route_set_add(vty, vty->index, "metric", argv[0]);
 }
 
-ALIAS(set_metric, set_metric_addsub_cmd, "set metric <+/-metric>",
-      SET_STR
+ALIAS(set_metric, set_metric_addsub_cmd, "set metric <+/-metric>", SET_STR
       "Metric value for destination routing protocol\n"
       "Add or subtract metric\n")
 
@@ -1019,8 +1011,7 @@ DEFUN (no_set_metric,
 }
 
 ALIAS(no_set_metric, no_set_metric_val_cmd,
-      "no set metric (<0-4294967295>|<+/-metric>)",
-      NO_STR SET_STR
+      "no set metric (<0-4294967295>|<+/-metric>)", NO_STR SET_STR
       "Metric value for destination routing protocol\n"
       "Metric value\n"
       "Add or subtract metric\n")
@@ -1061,8 +1052,7 @@ DEFUN (no_set_ip_nexthop,
 }
 
 ALIAS(no_set_ip_nexthop, no_set_ip_nexthop_val_cmd,
-      "no set ip next-hop A.B.C.D",
-      NO_STR SET_STR IP_STR
+      "no set ip next-hop A.B.C.D", NO_STR SET_STR IP_STR
       "Next hop address\n"
       "IP address of next hop\n")
 
@@ -1089,8 +1079,7 @@ DEFUN (no_set_tag,
        return eigrp_route_set_delete(vty, vty->index, "tag", argv[0]);
 }
 
-ALIAS(no_set_tag, no_set_tag_val_cmd, "no set tag <0-65535>",
-      NO_STR SET_STR
+ALIAS(no_set_tag, no_set_tag_val_cmd, "no set tag <0-65535>", NO_STR SET_STR
       "Tag value for routing protocol\n"
       "Tag value\n")
 
index bc87b076bbc89b9cb69135f4dfbfa405381959b6..6b3a14abc5664671d8a42f3da83d347f1d9d966f 100644 (file)
@@ -104,8 +104,9 @@ struct eigrp {
 
        uint64_t serno; /* Global serial number counter for topology entry
                           changes*/
-       uint64_t serno_last_update; /* Highest serial number of information send
-                                      by last update*/
+       uint64_t
+               serno_last_update; /* Highest serial number of information send
+                                     by last update*/
        struct list *topology_changes_internalIPV4;
        struct list *topology_changes_externalIPV4;
 
index 88a6ccf2a8e069e8a9cb151cd734dd42a8d23f87..3c2ce6ce428e37a4a7ff7ab6c19a509569aba6b0 100644 (file)
@@ -771,8 +771,8 @@ void eigrp_update_send_all(struct eigrp *eigrp,
 /**
  * @fn eigrp_update_send_GR_part
  *
- * @param[in]          nbr             contains neighbor who would receive
- * Graceful restart
+ * @param[in]          nbr             contains neighbor who would receive Graceful
+ * restart
  *
  * @return void
  *
@@ -1034,8 +1034,8 @@ int eigrp_update_send_GR_thread(struct thread *thread)
 /**
  * @fn eigrp_update_send_GR
  *
- * @param[in]          nbr                     Neighbor who would receive
- * Graceful restart
+ * @param[in]          nbr                     Neighbor who would receive Graceful
+ * restart
  * @param[in]          gr_type         Who executed Graceful restart
  * @param[in]          vty             Virtual terminal for log output
  *
@@ -1094,8 +1094,8 @@ void eigrp_update_send_GR(struct eigrp_neighbor *nbr, enum GR_type gr_type,
 /**
  * @fn eigrp_update_send_interface_GR
  *
- * @param[in]          ei                      Interface to neighbors of which the
- * GR is sent
+ * @param[in]          ei                      Interface to neighbors of which the GR
+ * is sent
  * @param[in]          gr_type         Who executed Graceful restart
  * @param[in]          vty             Virtual terminal for log output
  *
index d416183f52a4223b02b137b1afa92edb6618f1b9..465007478d940cfe328c187bf200a3196fc93f0e 100644 (file)
@@ -237,6 +237,11 @@ DEFUN (no_router_eigrp,
        struct eigrp *eigrp;
 
        eigrp = eigrp_lookup();
+       if (eigrp == NULL) {
+               vty_out(vty, " EIGRP Routing Process not enabled\n");
+               return CMD_SUCCESS;
+       }
+
        if (eigrp->AS != atoi(argv[3]->arg)) {
                vty_out(vty, "%% Attempting to deconfigure non-existent AS\n");
                return CMD_WARNING_CONFIG_FAILED;
@@ -1000,9 +1005,11 @@ DEFUN (eigrp_redistribute_source_metric,
 
        /* Get distribute source. */
        argv_find(argv, argc, "redistribute", &idx);
-       source = proto_redistnum(AFI_IP, argv[idx + 1]->arg);
-       if (source < 0)
+       source = proto_redistnum(AFI_IP, argv[idx + 1]->text);
+       if (source < 0) {
+               vty_out(vty, "%% Invalid route type\n");
                return CMD_WARNING_CONFIG_FAILED;
+       }
 
        /* Get metrics values */
 
@@ -1029,9 +1036,11 @@ DEFUN (no_eigrp_redistribute_source_metric,
 
        /* Get distribute source. */
        argv_find(argv, argc, "redistribute", &idx);
-       source = proto_redistnum(AFI_IP, argv[idx + 1]->arg);
-       if (source < 0)
+       source = proto_redistnum(AFI_IP, argv[idx + 1]->text);
+       if (source < 0) {
+               vty_out(vty, "%% Invalid route type\n");
                return CMD_WARNING_CONFIG_FAILED;
+       }
 
        /* Get metrics values */
 
diff --git a/git-reindent-branch.py b/git-reindent-branch.py
new file mode 100644 (file)
index 0000000..b0dd8db
--- /dev/null
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import sys, os
+import subprocess, argparse, tempfile
+import indent
+
+def run(cmd):
+    proc = subprocess.Popen(cmd, stdout = subprocess.PIPE)
+    rv = proc.communicate('')[0].decode('UTF-8')
+    proc.wait()
+    return rv
+
+argp = argparse.ArgumentParser(description = 'git whitespace-fixing tool')
+argp.add_argument('branch', metavar='BRANCH', type = str, nargs = '?', default = 'HEAD')
+args = argp.parse_args()
+
+branch = args.branch
+commit   = run(['git', 'rev-list', '-n', '1', branch, '--']).strip()
+beforeid = run(['git', 'rev-list', '-n', '1', 'reindent-master-before', '--']).strip()
+afterid  = run(['git', 'rev-list', '-n', '1', 'reindent-master-after', '--']).strip()
+
+beforebase = run(['git', 'merge-base', commit, beforeid]).strip()
+afterbase  = run(['git', 'merge-base', commit, afterid]).strip()
+
+if afterbase == afterid:
+    sys.stderr.write('this branch was already rebased\n')
+    sys.exit(1)
+
+if beforebase != beforeid:
+    sys.stderr.write('you need to rebase your branch onto the tag "reindent-master-before"\n')
+    sys.exit(1)
+
+revs = run(['git', 'rev-list', 'reindent-master-before..%s' % commit]).strip().split('\n')
+revs.reverse()
+
+srcdir = os.getcwd()
+tmpdir = tempfile.mkdtemp('frrindent')
+os.chdir(tmpdir)
+
+sys.stderr.write('using temporary directory %s; %d revisions\n' % (tmpdir, len(revs)))
+run(['git', 'clone', '-s', '-b', 'reindent-master-after', srcdir, 'repo'])
+os.chdir('repo')
+
+prev = beforeid
+for rev in revs:
+    filestat = run(['git', 'diff', '-z', '--name-status', prev, rev]).rstrip('\0').split('\0')
+    changes = zip(filestat[0::2], filestat[1::2])
+    sys.stderr.write('%s: %d files\n' % (rev, len(changes)))
+
+    for typ, name in changes:
+        if typ == 'D':
+            run(['git', 'rm', name])
+        elif typ in ['A', 'M']:
+            run(['git', 'checkout', rev, '--', name])
+            if name.endswith('.c') or name.endswith('.h'):
+                for d in ['babeld/', 'ldpd/', 'nhrpd/']:
+                    if name.startswith(d):
+                        break
+                else:
+                    sys.stderr.write('\t%s\n' % name)
+                    indent.wrap_file(name)
+            run(['git', 'add', name])
+
+    run(['git', 'commit', '-C', rev])
+    prev = rev
+
+run(['git', 'push', 'origin', 'HEAD:refs/heads/reindented-branch'])
+sys.stderr.write('\n\n"reindented-branch" should now be OK.\n')
+sys.stderr.write('you could use "git reset --hard reindented-branch" to set your current branch to the reindented output\n')
+sys.stderr.write('\033[31;1mplease always double-check the output\033[m\n')
+
index 5da2a741a74a2d84ac3ecee0287b21190a4a81d8..f09a8152a836a6109fd0d10d74d47c4c272eae60 100644 (file)
@@ -441,7 +441,7 @@ dnode_t *dict_lookup(dict_t *dict, const void *key)
                        root = root->right;
                else {
                        if (!dict->dupes) { /* no duplicates, return match
-                                            */
+                                              */
                                return root;
                        } else { /* could be dupes, find leftmost one   */
                                do {
index 7214f3109323f991bd3253a80211bf6ce9c900d2..d8cb32375bec3506581ba8901b27b7d37c2a33c9 100644 (file)
@@ -446,10 +446,9 @@ void isis_adj_print_vty(struct isis_adjacency *adj, struct vty *vty,
                                        adj->dis_record[ISIS_LEVELS + level - 1]
                                                .dis),
                                adj->dischanges[level - 1],
-                               time2string(now
-                                           - (adj->dis_record[ISIS_LEVELS
-                                                              + level - 1]
-                                                      .last_dis_change)));
+                               time2string(now - (adj->dis_record[ISIS_LEVELS
+                                                                  + level - 1]
+                                                          .last_dis_change)));
                }
                vty_out(vty, "\n");
 
index de2c453aeebdfd1916db965876c28fbe2d2f47ca..72810532b01a83026a658b13a9869a16164362c6 100644 (file)
@@ -1270,9 +1270,7 @@ int isis_circuit_passwd_hmac_md5_set(struct isis_circuit *circuit,
                                       passwd);
 }
 struct cmd_node interface_node = {
-       INTERFACE_NODE,
-       "%s(config-if)# ",
-       1,
+       INTERFACE_NODE, "%s(config-if)# ", 1,
 };
 
 int isis_circuit_circ_type_set(struct isis_circuit *circuit, int circ_type)
index e86b9d93e44ded5a793ba1f9860fdf5e848e50a8..40c6141ab8128a5bdbea2085388a9c4fdab0fb3f 100644 (file)
@@ -838,30 +838,26 @@ static void lsp_print_mt_ipv6_reach(struct list *list, struct vty *vty,
                if (mtid == ISIS_MT_IPV4_UNICAST) {
                        if ((ipv6_reach->control_info & CTRL_INFO_DISTRIBUTION)
                            == DISTRIBUTION_INTERNAL)
-                               vty_out(vty,
-                                       "  Metric      : %-8" PRIu32
-                                       " IPv6-Internal : %s/%d\n",
+                               vty_out(vty, "  Metric      : %-8" PRIu32
+                                            " IPv6-Internal : %s/%d\n",
                                        ntohl(ipv6_reach->metric), buff,
                                        ipv6_reach->prefix_len);
                        else
-                               vty_out(vty,
-                                       "  Metric      : %-8" PRIu32
-                                       " IPv6-External : %s/%d\n",
+                               vty_out(vty, "  Metric      : %-8" PRIu32
+                                            " IPv6-External : %s/%d\n",
                                        ntohl(ipv6_reach->metric), buff,
                                        ipv6_reach->prefix_len);
                } else {
                        if ((ipv6_reach->control_info & CTRL_INFO_DISTRIBUTION)
                            == DISTRIBUTION_INTERNAL)
-                               vty_out(vty,
-                                       "  Metric      : %-8" PRIu32
-                                       " IPv6-MT-Int   : %s/%d %s\n",
+                               vty_out(vty, "  Metric      : %-8" PRIu32
+                                            " IPv6-MT-Int   : %s/%d %s\n",
                                        ntohl(ipv6_reach->metric), buff,
                                        ipv6_reach->prefix_len,
                                        isis_mtid2str(mtid));
                        else
-                               vty_out(vty,
-                                       "  Metric      : %-8" PRIu32
-                                       " IPv6-MT-Ext   : %s/%d %s\n",
+                               vty_out(vty, "  Metric      : %-8" PRIu32
+                                            " IPv6-MT-Ext   : %s/%d %s\n",
                                        ntohl(ipv6_reach->metric), buff,
                                        ipv6_reach->prefix_len,
                                        isis_mtid2str(mtid));
@@ -879,9 +875,8 @@ static void lsp_print_mt_ipv4_reach(struct list *list, struct vty *vty,
                if (mtid == ISIS_MT_IPV4_UNICAST) {
                        /* FIXME: There should be better way to output this
                         * stuff. */
-                       vty_out(vty,
-                               "  Metric      : %-8" PRIu32
-                               " IPv4-Extended : %s/%d\n",
+                       vty_out(vty, "  Metric      : %-8" PRIu32
+                                    " IPv4-Extended : %s/%d\n",
                                ntohl(te_ipv4_reach->te_metric),
                                inet_ntoa(newprefix2inaddr(
                                        &te_ipv4_reach->prefix_start,
@@ -890,9 +885,8 @@ static void lsp_print_mt_ipv4_reach(struct list *list, struct vty *vty,
                } else {
                        /* FIXME: There should be better way to output this
                         * stuff. */
-                       vty_out(vty,
-                               "  Metric      : %-8" PRIu32
-                               " IPv4-MT       : %s/%d %s\n",
+                       vty_out(vty, "  Metric      : %-8" PRIu32
+                                    " IPv4-MT       : %s/%d %s\n",
                                ntohl(te_ipv4_reach->te_metric),
                                inet_ntoa(newprefix2inaddr(
                                        &te_ipv4_reach->prefix_start,
@@ -993,9 +987,8 @@ void lsp_print_detail(struct isis_lsp *lsp, struct vty *vty, char dynhost)
                for (ALL_LIST_ELEMENTS_RO(lsp->tlv_data.is_neighs, lnode,
                                          is_neigh)) {
                        lspid_print(is_neigh->neigh_id, LSPid, dynhost, 0);
-                       vty_out(vty,
-                               "  Metric      : %-8" PRIu8
-                               " IS            : %s\n",
+                       vty_out(vty, "  Metric      : %-8" PRIu8
+                                    " IS            : %s\n",
                                is_neigh->metrics.metric_default, LSPid);
                }
 
@@ -1007,9 +1000,8 @@ void lsp_print_detail(struct isis_lsp *lsp, struct vty *vty, char dynhost)
                               sizeof(ipv4_reach_prefix));
                        memcpy(ipv4_reach_mask, inet_ntoa(ipv4_reach->mask),
                               sizeof(ipv4_reach_mask));
-                       vty_out(vty,
-                               "  Metric      : %-8" PRIu8
-                               " IPv4-Internal : %s %s\n",
+                       vty_out(vty, "  Metric      : %-8" PRIu8
+                                    " IPv4-Internal : %s %s\n",
                                ipv4_reach->metrics.metric_default,
                                ipv4_reach_prefix, ipv4_reach_mask);
                }
@@ -1022,9 +1014,8 @@ void lsp_print_detail(struct isis_lsp *lsp, struct vty *vty, char dynhost)
                               sizeof(ipv4_reach_prefix));
                        memcpy(ipv4_reach_mask, inet_ntoa(ipv4_reach->mask),
                               sizeof(ipv4_reach_mask));
-                       vty_out(vty,
-                               "  Metric      : %-8" PRIu8
-                               " IPv4-External : %s %s\n",
+                       vty_out(vty, "  Metric      : %-8" PRIu8
+                                    " IPv4-External : %s %s\n",
                                ipv4_reach->metrics.metric_default,
                                ipv4_reach_prefix, ipv4_reach_mask);
                }
@@ -2763,9 +2754,9 @@ int lsp_regenerate_schedule_pseudo(struct isis_circuit *circuit, int level)
                THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[lvl - 1]);
                diff = now - lsp->last_generated;
                if (diff < circuit->area->lsp_gen_interval[lvl - 1]) {
-                       timeout = 1000
-                                 * (circuit->area->lsp_gen_interval[lvl - 1]
-                                    - diff);
+                       timeout =
+                               1000 * (circuit->area->lsp_gen_interval[lvl - 1]
+                                       - diff);
                        sched_debug(
                                "ISIS (%s): Sechduling in %ld ms to match configured lsp_gen_interval",
                                area->area_tag, timeout);
@@ -2990,9 +2981,9 @@ void lsp_purge_non_exist(int level, struct isis_link_state_hdr *lsp_hdr,
        lsp->level = level;
        lsp->pdu = stream_new(LLC_LEN + area->lsp_mtu);
        lsp->isis_header = (struct isis_fixed_hdr *)STREAM_DATA(lsp->pdu);
-       fill_fixed_hdr(lsp->isis_header, (lsp->level == IS_LEVEL_1)
-                                                ? L1_LINK_STATE
-                                                : L2_LINK_STATE);
+       fill_fixed_hdr(lsp->isis_header,
+                      (lsp->level == IS_LEVEL_1) ? L1_LINK_STATE
+                                                 : L2_LINK_STATE);
        lsp->lsp_header = (struct isis_link_state_hdr *)(STREAM_DATA(lsp->pdu)
                                                         + ISIS_FIXED_HDR_LEN);
        memcpy(lsp->lsp_header, lsp_hdr, ISIS_LSP_HDR_LEN);
index c107c2e3471bc9da30b32b1924cc792af7ea0ae8..a3706179a6b305a06f66d16c5025ac90e4f02835 100644 (file)
@@ -1391,10 +1391,11 @@ dontcheckadj:
                                        lsp_set_all_srmflags(lsp);
                                        /* v */
                                        ISIS_FLAGS_CLEAR_ALL(
-                                               lsp->SSNflags); /* FIXME:
-                                                                  OTHER
-                                                                  than c
-                                                                  */
+                                               lsp
+                                                       ->SSNflags); /* FIXME:
+                                                                       OTHER
+                                                                       than c
+                                                                       */
 
                                        /* For the case of lsp confusion, flood
                                         * the purge back to its
index e5752e31f6444cb5d4b6692802e3d1c947ae5ad0..e24901b0defeb03ef97d002b3acf864cab99c01a 100644 (file)
 extern struct zebra_privs_t isisd_privs;
 
 /* tcpdump -i eth0 'isis' -dd */
-static struct sock_filter isisfilter[] = {
-       /* NB: we're in SOCK_DGRAM, so src/dst mac + length are stripped
-        * off!
-        * (OTOH it's a bit more lower-layer agnostic and might work
-        * over GRE?) */
-       /*      { 0x28, 0, 0, 0x0000000c - 14 }, */
-       /*      { 0x25, 5, 0, 0x000005dc }, */
-       {0x28, 0, 0, 0x0000000e - 14}, {0x15, 0, 3, 0x0000fefe},
-       {0x30, 0, 0, 0x00000011 - 14}, {0x15, 0, 1, 0x00000083},
-       {0x6, 0, 0, 0x00040000},       {0x6, 0, 0, 0x00000000},
+static struct sock_filter isisfilter[] =
+       {
+               /* NB: we're in SOCK_DGRAM, so src/dst mac + length are stripped
+                * off!
+                * (OTOH it's a bit more lower-layer agnostic and might work
+                * over GRE?) */
+               /*      { 0x28, 0, 0, 0x0000000c - 14 }, */
+               /*      { 0x25, 5, 0, 0x000005dc }, */
+               {0x28, 0, 0, 0x0000000e - 14}, {0x15, 0, 3, 0x0000fefe},
+               {0x30, 0, 0, 0x00000011 - 14}, {0x15, 0, 1, 0x00000083},
+               {0x6, 0, 0, 0x00040000},       {0x6, 0, 0, 0x00000000},
 };
 
 static struct sock_fprog bpf = {
index 9f27d780a410fb83fbbca58b6f6fb2946f20227c..8e329494dd5b9e903cf6c91c41d2456e1514bbb0 100644 (file)
@@ -389,9 +389,9 @@ static void isis_redist_update_zebra_subscriptions(struct isis *isis)
                for (protocol = 0; protocol < REDIST_PROTOCOL_COUNT; protocol++)
                        for (type = 0; type < ZEBRA_ROUTE_MAX + 1; type++)
                                for (level = 0; level < ISIS_LEVELS; level++)
-                                       if (area->redist_settings
-                                                   [protocol][type][level]
-                                                           .redist)
+                                       if (area->redist_settings[protocol]
+                                                                [type]
+                                                                [level].redist)
                                                do_subscribe[protocol][type] =
                                                        1;
 
index 620b19391d32776ee9fb48de5492196333903f4c..615c2eeaa2c89ccfb00344e264ef52026e36fd8f 100644 (file)
@@ -366,9 +366,10 @@ static struct isis_vertex *isis_spf_add_root(struct isis_spftree *spftree,
                zlog_warn("ISIS-Spf: could not find own l%d LSP!",
                          spftree->level);
 
-       vertex = isis_vertex_new(id, spftree->area->oldmetric
-                                            ? VTYPE_NONPSEUDO_IS
-                                            : VTYPE_NONPSEUDO_TE_IS);
+       vertex = isis_vertex_new(id,
+                                spftree->area->oldmetric
+                                        ? VTYPE_NONPSEUDO_IS
+                                        : VTYPE_NONPSEUDO_TE_IS);
        listnode_add(spftree->paths, vertex);
 
 #ifdef EXTREME_DEBUG
@@ -507,13 +508,11 @@ static void isis_spf_add_local(struct isis_spftree *spftree,
                        /*       d) */
                        if (listcount(vertex->Adj_N) > ISIS_MAX_PATH_SPLITS)
                                remove_excess_adjs(vertex->Adj_N);
-                       if (parent
-                           && (listnode_lookup(vertex->parents, parent)
-                               == NULL))
+                       if (parent && (listnode_lookup(vertex->parents, parent)
+                                      == NULL))
                                listnode_add(vertex->parents, parent);
-                       if (parent
-                           && (listnode_lookup(parent->children, vertex)
-                               == NULL))
+                       if (parent && (listnode_lookup(parent->children, vertex)
+                                      == NULL))
                                listnode_add(parent->children, vertex);
                        return;
                } else if (vertex->d_N < cost) {
@@ -650,9 +649,8 @@ static int isis_spf_process_lsp(struct isis_spftree *spftree,
                mt_router_info = tlvs_lookup_mt_router_info(&lsp->tlv_data,
                                                            spftree->mtid);
 
-       if (!pseudo_lsp
-           && (spftree->mtid == ISIS_MT_IPV4_UNICAST
-               && !speaks(lsp->tlv_data.nlpids, spftree->family))
+       if (!pseudo_lsp && (spftree->mtid == ISIS_MT_IPV4_UNICAST
+                           && !speaks(lsp->tlv_data.nlpids, spftree->family))
            && !mt_router_info)
                return ISIS_OK;
 
@@ -669,9 +667,8 @@ lspfragloop:
 #endif /* EXTREME_DEBUG */
 
        /* RFC3787 section 4 SHOULD ignore overload bit in pseudo LSPs */
-       if (pseudo_lsp
-           || (spftree->mtid == ISIS_MT_IPV4_UNICAST
-               && !ISIS_MASK_LSP_OL_BIT(lsp->lsp_header->lsp_bits))
+       if (pseudo_lsp || (spftree->mtid == ISIS_MT_IPV4_UNICAST
+                          && !ISIS_MASK_LSP_OL_BIT(lsp->lsp_header->lsp_bits))
            || (mt_router_info && !mt_router_info->overload))
 
        {
index dea44f5f23813eb554f396f4feaf6b052445a2da..d06548519f8e80909f8102419d21f80f4926c2b3 100644 (file)
@@ -217,7 +217,7 @@ struct te_ipv4_reachability {
        u_int32_t te_metric;
        u_char control;
        u_char prefix_start; /* since this is variable length by nature it only
-                             */
+                               */
 };                          /* points to an approximate location */
 
 #define TE_IPV4_HAS_SUBTLV (0x40)
index 007d48f33d18171224f46bcef37415e79dbf76d7..1aacea881f6efc9dd4010ff04a2961e5798119eb 100644 (file)
@@ -70,7 +70,7 @@ struct isis_area {
        struct isis_spftree *spftree6[ISIS_LEVELS];    /* The v6 SPTs */
        struct route_table *route_table6[ISIS_LEVELS]; /* IPv6 routes */
                                                       /* $FRR indent$ */
-                                                      /* clang-format off */
+/* clang-format off */
 #define DEFAULT_LSP_MTU 1497
        unsigned int lsp_mtu;      /* Size of LSPs to generate */
        struct list *circuit_list; /* IS-IS circuits */
index 35f7740d111904f261bad4604fbd7ba475f46890..f52b227cb1f9f1f93908a9ee4548e5d5931a860a 100644 (file)
@@ -15,3 +15,4 @@ TAGS
 .arch-ids
 *~
 *.loT
+ldp_vty_cmds_clippy.c
index 6074b53a337d2a775c83dfbcbfac3102958e55b7..de9b07ed4c7d485e74e5599c40bb44f256bc1f49 100644 (file)
@@ -1,5 +1,7 @@
 ## Process this file with automake to produce Makefile.in.
 
+include ../common.am
+
 AM_CPPFLAGS = -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib
 DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
 INSTALL_SDATA=@INSTALL@ -m 600
@@ -16,6 +18,8 @@ libldp_a_SOURCES = \
        socket.c util.c ldp_vty_cmds.c ldp_vty_conf.c ldp_vty_exec.c \
        ldp_debug.c ldp_zebra.c
 
+ldp_vty_cmds.o: ldp_vty_cmds_clippy.c
+
 noinst_HEADERS = \
        control.h lde.h ldpd.h ldpe.h ldp.h log.h ldp_debug.h ldp_vty.h
 
index 602dc8805e54096a2547afce1847170884566252..77643ff48bbad3ca037925dcd020cfe35faa7309 100644 (file)
@@ -1328,7 +1328,6 @@ lde_nbr_addr_update(struct lde_nbr *ln, struct lde_addr *lde_addr, int removed)
        struct lde_map          *me;
 
        RB_FOREACH(fec, fec_tree, &ln->recv_map) {
-               fn = (struct fec_node *)fec_find(&ft, fec);
                switch (fec->type) {
                case FEC_TYPE_IPV4:
                        if (lde_addr->af != AF_INET)
@@ -1342,6 +1341,11 @@ lde_nbr_addr_update(struct lde_nbr *ln, struct lde_addr *lde_addr, int removed)
                        continue;
                }
 
+               fn = (struct fec_node *)fec_find(&ft, fec);
+               if (fn == NULL)
+                       /* shouldn't happen */
+                       continue;
+
                LIST_FOREACH(fnh, &fn->nexthops, entry) {
                        if (ldp_addrcmp(fnh->af, &fnh->nexthop,
                            &lde_addr->addr))
index c9c7160aedf3f7d47558c21bdb8da781c136a795..d80ec8dfbc69086cf83773f38ffe46398155f06a 100644 (file)
@@ -38,31 +38,31 @@ struct cmd_node ldp_debug_node =
 };
 
 int
-ldp_vty_debug(struct vty *vty, int disable, const char *type_str,
-    const char *dir_str, int all)
+ldp_vty_debug(struct vty *vty, const char *negate, const char *type_str,
+    const char *dir_str, const char *all)
 {
        if (strcmp(type_str, "discovery") == 0) {
                if (dir_str == NULL)
                        return (CMD_WARNING_CONFIG_FAILED);
 
                if (dir_str[0] == 'r') {
-                       if (disable)
+                       if (negate)
                                DEBUG_OFF(hello, HELLO_RECV);
                        else
                                DEBUG_ON(hello, HELLO_RECV);
                } else {
-                       if (disable)
+                       if (negate)
                                DEBUG_OFF(hello, HELLO_SEND);
                        else
                                DEBUG_ON(hello, HELLO_SEND);
                }
        } else if (strcmp(type_str, "errors") == 0) {
-               if (disable)
+               if (negate)
                        DEBUG_OFF(errors, ERRORS);
                else
                        DEBUG_ON(errors, ERRORS);
        } else if (strcmp(type_str, "event") == 0) {
-               if (disable)
+               if (negate)
                        DEBUG_OFF(event, EVENT);
                else
                        DEBUG_ON(event, EVENT);
@@ -71,7 +71,7 @@ ldp_vty_debug(struct vty *vty, int disable, const char *type_str,
                        return (CMD_WARNING_CONFIG_FAILED);
 
                if (dir_str[0] == 'r') {
-                       if (disable) {
+                       if (negate) {
                                DEBUG_OFF(msg, MSG_RECV);
                                DEBUG_OFF(msg, MSG_RECV_ALL);
                        } else {
@@ -80,7 +80,7 @@ ldp_vty_debug(struct vty *vty, int disable, const char *type_str,
                                        DEBUG_ON(msg, MSG_RECV_ALL);
                        }
                } else {
-                       if (disable) {
+                       if (negate) {
                                DEBUG_OFF(msg, MSG_SEND);
                                DEBUG_OFF(msg, MSG_SEND_ALL);
                        } else {
@@ -90,7 +90,7 @@ ldp_vty_debug(struct vty *vty, int disable, const char *type_str,
                        }
                }
        } else if (strcmp(type_str, "zebra") == 0) {
-               if (disable)
+               if (negate)
                        DEBUG_OFF(zebra, ZEBRA);
                else
                        DEBUG_ON(zebra, ZEBRA);
index 93713166f46b4e08bb9443efc00f17eda1cb6f20..3d2072f1e51c8098c712ac98a6c347c91dfaa5ee 100644 (file)
@@ -36,46 +36,46 @@ int  ldp_get_address(const char *, int *, union ldpd_addr *);
 int     ldp_config_write(struct vty *);
 int     ldp_l2vpn_config_write(struct vty *);
 int     ldp_debug_config_write(struct vty *);
-int     ldp_vty_mpls_ldp (struct vty *, int);
-int     ldp_vty_address_family (struct vty *, int, const char *);
-int     ldp_vty_disc_holdtime(struct vty *, int, const char *, const char *);
-int     ldp_vty_disc_interval(struct vty *, int, const char *, const char *);
-int     ldp_vty_targeted_hello_accept(struct vty *, int, const char *);
-int     ldp_vty_nbr_session_holdtime(struct vty *, int, const char *, const char *);
-int     ldp_vty_af_session_holdtime(struct vty *, int, const char *);
-int     ldp_vty_interface(struct vty *, int, const char *);
-int     ldp_vty_trans_addr(struct vty *, int, const char *);
-int     ldp_vty_neighbor_targeted(struct vty *, int, const char *);
-int     ldp_vty_label_advertise(struct vty *, int, const char *, const char *);
-int     ldp_vty_label_allocate(struct vty *, int, int, const char *);
-int     ldp_vty_label_expnull(struct vty *, int, const char *);
-int     ldp_vty_label_accept(struct vty *, int, const char *, const char *);
-int     ldp_vty_ttl_security(struct vty *, int);
-int     ldp_vty_router_id(struct vty *, int, const char *);
-int     ldp_vty_ds_cisco_interop(struct vty *, int);
-int     ldp_vty_trans_pref_ipv4(struct vty *, int);
-int     ldp_vty_neighbor_password(struct vty *, int, const char *, const char *);
-int     ldp_vty_neighbor_ttl_security(struct vty *, int, const char *, const char *);
-int     ldp_vty_l2vpn(struct vty *, int, const char *);
-int     ldp_vty_l2vpn_bridge(struct vty *, int, const char *);
-int     ldp_vty_l2vpn_mtu(struct vty *, int, const char *);
-int     ldp_vty_l2vpn_pwtype(struct vty *, int, const char *);
-int     ldp_vty_l2vpn_interface(struct vty *, int, const char *);
-int     ldp_vty_l2vpn_pseudowire(struct vty *, int, const char *);
-int     ldp_vty_l2vpn_pw_cword(struct vty *, int, const char *);
-int     ldp_vty_l2vpn_pw_nbr_addr(struct vty *, int, const char *);
-int     ldp_vty_l2vpn_pw_nbr_id(struct vty *, int, const char *);
-int     ldp_vty_l2vpn_pw_pwid(struct vty *, int, const char *);
-int     ldp_vty_l2vpn_pw_pwstatus(struct vty *, int);
+int     ldp_vty_mpls_ldp (struct vty *, const char *);
+int     ldp_vty_address_family (struct vty *, const char *, const char *);
+int     ldp_vty_disc_holdtime(struct vty *, const char *, const char *, long);
+int     ldp_vty_disc_interval(struct vty *, const char *, const char *, long);
+int     ldp_vty_targeted_hello_accept(struct vty *, const char *, const char *);
+int     ldp_vty_nbr_session_holdtime(struct vty *, const char *, struct in_addr, long);
+int     ldp_vty_af_session_holdtime(struct vty *, const char *, long);
+int     ldp_vty_interface(struct vty *, const char *, const char *);
+int     ldp_vty_trans_addr(struct vty *, const char *, const char *);
+int     ldp_vty_neighbor_targeted(struct vty *, const char *, const char *);
+int     ldp_vty_label_advertise(struct vty *, const char *, const char *, const char *);
+int     ldp_vty_label_allocate(struct vty *, const char *, const char *, const char *);
+int     ldp_vty_label_expnull(struct vty *, const char *, const char *);
+int     ldp_vty_label_accept(struct vty *, const char *, const char *, const char *);
+int     ldp_vty_ttl_security(struct vty *, const char *);
+int     ldp_vty_router_id(struct vty *, const char *, struct in_addr);
+int     ldp_vty_ds_cisco_interop(struct vty *, const char *);
+int     ldp_vty_trans_pref_ipv4(struct vty *, const char *);
+int     ldp_vty_neighbor_password(struct vty *, const char *, struct in_addr, const char *);
+int     ldp_vty_neighbor_ttl_security(struct vty *, const char *, struct in_addr, const char *);
+int     ldp_vty_l2vpn(struct vty *, const char *, const char *);
+int     ldp_vty_l2vpn_bridge(struct vty *, const char *, const char *);
+int     ldp_vty_l2vpn_mtu(struct vty *, const char *, long);
+int     ldp_vty_l2vpn_pwtype(struct vty *, const char *, const char *);
+int     ldp_vty_l2vpn_interface(struct vty *, const char *, const char *);
+int     ldp_vty_l2vpn_pseudowire(struct vty *, const char *, const char *);
+int     ldp_vty_l2vpn_pw_cword(struct vty *, const char *, const char *);
+int     ldp_vty_l2vpn_pw_nbr_addr(struct vty *, const char *, const char *);
+int     ldp_vty_l2vpn_pw_nbr_id(struct vty *, const char *, struct in_addr);
+int     ldp_vty_l2vpn_pw_pwid(struct vty *, const char *, long);
+int     ldp_vty_l2vpn_pw_pwstatus(struct vty *, const char *);
 int     ldp_vty_clear_nbr(struct vty *, const char *);
-int     ldp_vty_debug(struct vty *, int, const char *, const char *, int);
-int     ldp_vty_show_binding(struct vty *, const char *, int, int);
-int     ldp_vty_show_discovery(struct vty *, const char *, int, int);
-int     ldp_vty_show_interface(struct vty *, const char *, int);
-int     ldp_vty_show_capabilities(struct vty *, int);
-int     ldp_vty_show_neighbor(struct vty *, int, int, int);
-int     ldp_vty_show_atom_binding(struct vty *, int);
-int     ldp_vty_show_atom_vc(struct vty *, int);
+int     ldp_vty_debug(struct vty *, const char *, const char *, const char *, const char *);
+int     ldp_vty_show_binding(struct vty *, const char *, const char *, const char *);
+int     ldp_vty_show_discovery(struct vty *, const char *, const char *, const char *);
+int     ldp_vty_show_interface(struct vty *, const char *, const char *);
+int     ldp_vty_show_capabilities(struct vty *, const char *);
+int     ldp_vty_show_neighbor(struct vty *, int, const char *, const char *);
+int     ldp_vty_show_atom_binding(struct vty *, const char *);
+int     ldp_vty_show_atom_vc(struct vty *, const char *);
 int     ldp_vty_show_debugging(struct vty *);
 
 void    ldp_vty_init(void);
index d28424cbb704323bc83345abab222aa4b6021e0e..7da76185c636cf8662ffd4ca6c55622f2798faa9 100644 (file)
 
 #include "command.h"
 #include "vty.h"
+#include "ldpd/ldpd.h"
 #include "ldpd/ldp_vty.h"
+#include "ldpd/ldp_vty_cmds_clippy.c"
 
 DEFUN_NOSH(ldp_mpls_ldp,
        ldp_mpls_ldp_cmd,
-       "[no] mpls ldp",
-       "Negate a command or set its defaults\n"
+       "mpls ldp",
        "Global MPLS configuration subcommands\n"
        "Label Distribution Protocol\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
+       return (ldp_vty_mpls_ldp(vty, NULL));
+}
 
-       return (ldp_vty_mpls_ldp(vty, negate));
+DEFPY  (no_ldp_mpls_ldp,
+       no_ldp_mpls_ldp_cmd,
+       "no mpls ldp",
+       "Negate a command or set its defaults\n"
+       "Global MPLS configuration subcommands\n"
+       "Label Distribution Protocol\n")
+{
+       return (ldp_vty_mpls_ldp(vty, "no"));
 }
 
 DEFUN_NOSH(ldp_l2vpn,
        ldp_l2vpn_cmd,
-       "[no] l2vpn WORD type vpls",
-       "Negate a command or set its defaults\n"
+       "l2vpn WORD type vpls",
        "Configure l2vpn commands\n"
        "L2VPN name\n"
        "L2VPN type\n"
        "Virtual Private LAN Service\n")
 {
        int              idx = 0;
-       int              negate = 0;
        const char      *name;
 
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
        argv_find(argv, argc, "WORD", &idx);
        name = argv[idx]->arg;
 
-       return (ldp_vty_l2vpn(vty, negate, name));
+       return (ldp_vty_l2vpn(vty, 0, name));
+}
+
+DEFPY  (no_ldp_l2vpn,
+       no_ldp_l2vpn_cmd,
+       "no l2vpn WORD$l2vpn_name type vpls",
+       "Negate a command or set its defaults\n"
+       "Configure l2vpn commands\n"
+       "L2VPN name\n"
+       "L2VPN type\n"
+       "Virtual Private LAN Service\n")
+{
+       return (ldp_vty_l2vpn(vty, "no", l2vpn_name));
 }
 
 DEFUN_NOSH(ldp_address_family,
        ldp_address_family_cmd,
-       "[no] address-family <ipv4|ipv6>",
-       "Negate a command or set its defaults\n"
+       "address-family <ipv4|ipv6>",
        "Configure Address Family and its parameters\n"
        "IPv4\n"
        "IPv6\n")
 {
        int              idx = 0;
-       int              negate = 0;
        const char      *af;
 
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
        argv_find(argv, argc, "address-family", &idx);
        af = argv[idx + 1]->text;
 
-       return (ldp_vty_address_family(vty, negate, af));
+       return (ldp_vty_address_family(vty, 0, af));
 }
 
-DEFUN  (ldp_discovery_holdtime,
+DEFPY  (no_ldp_address_family,
+       no_ldp_address_family_cmd,
+       "no address-family <ipv4|ipv6>$af",
+       "Negate a command or set its defaults\n"
+       "Configure Address Family and its parameters\n"
+       "IPv4\n"
+       "IPv6\n")
+{
+       return (ldp_vty_address_family(vty, "no", af));
+}
+
+DEFUN_NOSH(ldp_exit_address_family,
+       ldp_exit_address_family_cmd,
+       "exit-address-family",
+       "Exit from Address Family configuration mode\n")
+{
+       if (vty->node == LDP_IPV4_NODE || vty->node == LDP_IPV6_NODE)
+               vty->node = LDP_NODE;
+       return CMD_SUCCESS;
+}
+
+DEFPY  (ldp_discovery_holdtime,
        ldp_discovery_holdtime_cmd,
-       "[no] discovery <hello|targeted-hello> holdtime (1-65535)",
+       "[no] discovery <hello|targeted-hello>$hello_type holdtime (1-65535)$holdtime",
        "Negate a command or set its defaults\n"
        "Configure discovery parameters\n"
        "LDP Link Hellos\n"
@@ -90,24 +120,12 @@ DEFUN  (ldp_discovery_holdtime,
        "Hello holdtime\n"
        "Time (seconds) - 65535 implies infinite\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *hello_type;
-       const char      *holdtime;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "discovery", &idx);
-       hello_type = argv[idx + 1]->text;
-       argv_find(argv, argc, "(1-65535)", &idx);
-       holdtime = argv[idx]->arg;
-
-       return (ldp_vty_disc_holdtime(vty, negate, hello_type, holdtime));
+       return (ldp_vty_disc_holdtime(vty, no, hello_type, holdtime));
 }
 
-DEFUN  (ldp_discovery_interval,
+DEFPY  (ldp_discovery_interval,
        ldp_discovery_interval_cmd,
-       "[no] discovery <hello|targeted-hello> interval (1-65535)",
+       "[no] discovery <hello|targeted-hello>$hello_type interval (1-65535)$interval",
        "Negate a command or set its defaults\n"
        "Configure discovery parameters\n"
        "LDP Link Hellos\n"
@@ -115,22 +133,10 @@ DEFUN  (ldp_discovery_interval,
        "Hello interval\n"
        "Time (seconds)\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *hello_type;
-       const char      *interval;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "discovery", &idx);
-       hello_type = argv[idx + 1]->text;
-       argv_find(argv, argc, "(1-65535)", &idx);
-       interval = argv[idx]->arg;
-
-       return (ldp_vty_disc_interval(vty, negate, hello_type, interval));
+       return (ldp_vty_disc_interval(vty, no, hello_type, interval));
 }
 
-DEFUN  (ldp_dual_stack_transport_connection_prefer_ipv4,
+DEFPY  (ldp_dual_stack_transport_connection_prefer_ipv4,
        ldp_dual_stack_transport_connection_prefer_ipv4_cmd,
        "[no] dual-stack transport-connection prefer ipv4",
        "Negate a command or set its defaults\n"
@@ -139,58 +145,34 @@ DEFUN  (ldp_dual_stack_transport_connection_prefer_ipv4,
        "Configure prefered address family for TCP transport connection with neighbor\n"
        "IPv4\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-
-       return (ldp_vty_trans_pref_ipv4(vty, negate));
+       return (ldp_vty_trans_pref_ipv4(vty, no));
 }
 
-DEFUN  (ldp_dual_stack_cisco_interop,
+DEFPY  (ldp_dual_stack_cisco_interop,
        ldp_dual_stack_cisco_interop_cmd,
        "[no] dual-stack cisco-interop",
        "Negate a command or set its defaults\n"
        "Configure dual stack parameters\n"
        "Use Cisco non-compliant format to send and interpret the Dual-Stack capability TLV\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-
-       return (ldp_vty_ds_cisco_interop(vty, negate));
+       return (ldp_vty_ds_cisco_interop(vty, no));
 }
 
-DEFUN  (ldp_neighbor_password,
+DEFPY  (ldp_neighbor_password,
        ldp_neighbor_password_cmd,
-       "[no] neighbor A.B.C.D password WORD",
+       "[no] neighbor A.B.C.D$neighbor password WORD$password",
        "Negate a command or set its defaults\n"
        "Configure neighbor parameters\n"
        "LDP Id of neighbor\n"
        "Configure password for MD5 authentication\n"
        "The password\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *neighbor;
-       const char      *password;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "A.B.C.D", &idx);
-       neighbor = argv[idx]->arg;
-       argv_find(argv, argc, "WORD", &idx);
-       password = argv[idx]->arg;
-
-       return (ldp_vty_neighbor_password(vty, negate, neighbor, password));
+       return (ldp_vty_neighbor_password(vty, no, neighbor, password));
 }
 
-DEFUN  (ldp_neighbor_session_holdtime,
+DEFPY  (ldp_neighbor_session_holdtime,
        ldp_neighbor_session_holdtime_cmd,
-       "[no] neighbor A.B.C.D session holdtime (15-65535)",
+       "[no] neighbor A.B.C.D$neighbor session holdtime (15-65535)$holdtime",
        "Negate a command or set its defaults\n"
        "Configure neighbor parameters\n"
        "LDP Id of neighbor\n"
@@ -198,24 +180,12 @@ DEFUN  (ldp_neighbor_session_holdtime,
        "Configure session holdtime\n"
        "Time (seconds)\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *neighbor;
-       const char      *holdtime;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "A.B.C.D", &idx);
-       neighbor = argv[idx]->arg;
-       argv_find(argv, argc, "(15-65535)", &idx);
-       holdtime = argv[idx]->arg;
-
-       return (ldp_vty_nbr_session_holdtime(vty, negate, neighbor, holdtime));
+       return (ldp_vty_nbr_session_holdtime(vty, no, neighbor, holdtime));
 }
 
-DEFUN  (ldp_neighbor_ttl_security,
+DEFPY  (ldp_neighbor_ttl_security,
        ldp_neighbor_ttl_security_cmd,
-       "[no] neighbor A.B.C.D ttl-security <disable|hops (1-254)>",
+       "[no] neighbor A.B.C.D$neighbor ttl-security <disable|hops (1-254)$hops>",
        "Negate a command or set its defaults\n"
        "Configure neighbor parameters\n"
        "LDP Id of neighbor\n"
@@ -224,43 +194,22 @@ DEFUN  (ldp_neighbor_ttl_security,
        "IP hops\n"
        "maximum number of hops\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *neighbor;
-       const char      *hops = NULL;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "A.B.C.D", &idx);
-       neighbor = argv[idx]->arg;
-       if (argv_find(argv, argc, "(1-254)", &idx))
-               hops = argv[idx]->arg;
-
-       return (ldp_vty_neighbor_ttl_security(vty, negate, neighbor, hops));
+       return (ldp_vty_neighbor_ttl_security(vty, no, neighbor, hops_str));
 }
 
-DEFUN  (ldp_router_id,
+DEFPY  (ldp_router_id,
        ldp_router_id_cmd,
-       "[no] router-id A.B.C.D",
+       "[no] router-id A.B.C.D$address",
        "Negate a command or set its defaults\n"
        "Configure router Id\n"
        "LSR Id (in form of an IPv4 address)\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *address;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "A.B.C.D", &idx);
-       address = argv[idx]->arg;
-
-       return (ldp_vty_router_id(vty, negate, address));
+       return (ldp_vty_router_id(vty, no, address));
 }
 
-DEFUN  (ldp_discovery_targeted_hello_accept,
+DEFPY  (ldp_discovery_targeted_hello_accept,
        ldp_discovery_targeted_hello_accept_cmd,
-       "[no] discovery targeted-hello accept [from <(1-199)|(1300-2699)|WORD>]",
+       "[no] discovery targeted-hello accept [from <(1-199)|(1300-2699)|WORD>$from_acl]",
        "Negate a command or set its defaults\n"
        "Configure discovery parameters\n"
        "LDP Targeted Hellos\n"
@@ -270,61 +219,34 @@ DEFUN  (ldp_discovery_targeted_hello_accept,
        "IP access-list number (expanded range)\n"
        "IP access-list name\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *from_acl = NULL;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       if (argv_find(argv, argc, "from", &idx))
-               from_acl = argv[idx + 1]->arg;
-
-       return (ldp_vty_targeted_hello_accept(vty, negate, from_acl));
+       return (ldp_vty_targeted_hello_accept(vty, no, from_acl));
 }
 
-DEFUN  (ldp_discovery_transport_address_ipv4,
+DEFPY  (ldp_discovery_transport_address_ipv4,
        ldp_discovery_transport_address_ipv4_cmd,
-       "[no] discovery transport-address A.B.C.D",
+       "[no] discovery transport-address A.B.C.D$address",
        "Negate a command or set its defaults\n"
        "Configure discovery parameters\n"
        "Specify transport address for TCP connection\n"
        "IP address to be used as transport address\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *address;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "A.B.C.D", &idx);
-       address = argv[idx]->arg;
-
-       return (ldp_vty_trans_addr(vty, negate, address));
+       return (ldp_vty_trans_addr(vty, no, address_str));
 }
 
-DEFUN  (ldp_discovery_transport_address_ipv6,
+DEFPY  (ldp_discovery_transport_address_ipv6,
        ldp_discovery_transport_address_ipv6_cmd,
-       "[no] discovery transport-address X:X::X:X",
+       "[no] discovery transport-address X:X::X:X$address",
        "Negate a command or set its defaults\n"
        "Configure discovery parameters\n"
        "Specify transport address for TCP connection\n"
        "IPv6 address to be used as transport address\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *address;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "X:X::X:X", &idx);
-       address = argv[idx]->arg;
-
-       return (ldp_vty_trans_addr(vty, negate, address));
+       return (ldp_vty_trans_addr(vty, no, address_str));
 }
 
-DEFUN  (ldp_label_local_advertise,
+DEFPY  (ldp_label_local_advertise,
        ldp_label_local_advertise_cmd,
-       "[no] label local advertise [{to <(1-199)|(1300-2699)|WORD>|for <(1-199)|(1300-2699)|WORD>}]",
+       "[no] label local advertise [{to <(1-199)|(1300-2699)|WORD>$to_acl|for <(1-199)|(1300-2699)|WORD>$for_acl}]",
        "Negate a command or set its defaults\n"
        "Configure label control and policies\n"
        "Configure local label control and policies\n"
@@ -338,27 +260,12 @@ DEFUN  (ldp_label_local_advertise,
        "IP access-list number (expanded range)\n"
        "IP access-list name\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *to_acl = NULL;
-       const char      *for_acl = NULL;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-
-       /* arguments within curly braces may be provided in any order */
-       if (argv_find(argv, argc, "to", &idx))
-               to_acl = argv[idx + 1]->arg;
-       idx = 0;
-       if (argv_find(argv, argc, "for", &idx))
-               for_acl = argv[idx + 1]->arg;
-
-       return (ldp_vty_label_advertise(vty, negate, to_acl, for_acl));
+       return (ldp_vty_label_advertise(vty, no, to_acl, for_acl));
 }
 
-DEFUN  (ldp_label_local_advertise_explicit_null,
+DEFPY  (ldp_label_local_advertise_explicit_null,
        ldp_label_local_advertise_explicit_null_cmd,
-       "[no] label local advertise explicit-null [for <(1-199)|(1300-2699)|WORD>]",
+       "[no] label local advertise explicit-null [for <(1-199)|(1300-2699)|WORD>$for_acl]",
        "Negate a command or set its defaults\n"
        "Configure label control and policies\n"
        "Configure local label control and policies\n"
@@ -369,21 +276,12 @@ DEFUN  (ldp_label_local_advertise_explicit_null,
        "IP access-list number (expanded range)\n"
        "IP access-list name\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *for_acl = NULL;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       if (argv_find(argv, argc, "for", &idx))
-               for_acl = argv[idx + 1]->arg;
-
-       return (ldp_vty_label_expnull(vty, negate, for_acl));
+       return (ldp_vty_label_expnull(vty, no, for_acl));
 }
 
-DEFUN  (ldp_label_local_allocate,
+DEFPY  (ldp_label_local_allocate,
        ldp_label_local_allocate_cmd,
-       "[no] label local allocate <host-routes|for <(1-199)|(1300-2699)|WORD>>",
+       "[no] label local allocate <host-routes$host_routes|for <(1-199)|(1300-2699)|WORD>$for_acl>",
        "Negate a command or set its defaults\n"
        "Configure label control and policies\n"
        "Configure local label control and policies\n"
@@ -394,27 +292,12 @@ DEFUN  (ldp_label_local_allocate,
        "IP access-list number (expanded range)\n"
        "IP access-list name\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       int              host_routes = 0;
-       const char      *for_acl = NULL;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-
-       /* arguments within curly braces may be provided in any order */
-       if (argv_find(argv, argc, "host-routes", &idx))
-               host_routes = 1;
-       idx = 0;
-       if (argv_find(argv, argc, "for", &idx))
-               for_acl = argv[idx + 1]->arg;
-
-       return (ldp_vty_label_allocate(vty, negate, host_routes, for_acl));
+       return (ldp_vty_label_allocate(vty, no, host_routes, for_acl));
 }
 
-DEFUN  (ldp_label_remote_accept,
+DEFPY  (ldp_label_remote_accept,
        ldp_label_remote_accept_cmd,
-       "[no] label remote accept {from <(1-199)|(1300-2699)|WORD>|for <(1-199)|(1300-2699)|WORD>}",
+       "[no] label remote accept {from <(1-199)|(1300-2699)|WORD>$from_acl|for <(1-199)|(1300-2699)|WORD>$for_acl}",
        "Negate a command or set its defaults\n"
        "Configure label control and policies\n"
        "Configure remote/peer label control and policies\n"
@@ -428,317 +311,204 @@ DEFUN  (ldp_label_remote_accept,
        "IP access-list number (expanded range)\n"
        "IP access-list name\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *from_acl = NULL;
-       const char      *for_acl = NULL;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-
-       /* arguments within curly braces may be provided in any order */
-       if (argv_find(argv, argc, "from", &idx))
-               from_acl = argv[idx + 1]->arg;
-       idx = 0;
-       if (argv_find(argv, argc, "for", &idx))
-               for_acl = argv[idx + 1]->arg;
-
-       return (ldp_vty_label_accept(vty, negate, from_acl, for_acl));
+       return (ldp_vty_label_accept(vty, no, from_acl, for_acl));
 }
 
-DEFUN  (ldp_ttl_security_disable,
+DEFPY  (ldp_ttl_security_disable,
        ldp_ttl_security_disable_cmd,
        "[no] ttl-security disable",
        "Negate a command or set its defaults\n"
        "LDP ttl security check\n"
        "Disable ttl security\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-
-       return (ldp_vty_ttl_security(vty, negate));
+       return (ldp_vty_ttl_security(vty, no));
 }
 
-DEFUN  (ldp_session_holdtime,
+DEFPY  (ldp_session_holdtime,
        ldp_session_holdtime_cmd,
-       "[no] session holdtime (15-65535)",
+       "[no] session holdtime (15-65535)$holdtime",
        "Negate a command or set its defaults\n"
        "Configure session parameters\n"
        "Configure session holdtime\n"
        "Time (seconds)\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *holdtime;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "(15-65535)", &idx);
-       holdtime = argv[idx]->arg;
-
-       return (ldp_vty_af_session_holdtime(vty, negate, holdtime));
+       return (ldp_vty_af_session_holdtime(vty, no, holdtime));
 }
 
 DEFUN_NOSH(ldp_interface,
        ldp_interface_cmd,
-       "[no] interface IFNAME",
-       "Negate a command or set its defaults\n"
+       "interface IFNAME",
        "Enable LDP on an interface and enter interface submode\n"
        "Interface's name\n")
 {
        int              idx = 0;
-       int              negate = 0;
        const char      *ifname;
 
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
        argv_find(argv, argc, "IFNAME", &idx);
        ifname = argv[idx]->arg;
 
-       return (ldp_vty_interface(vty, negate, ifname));
+       return (ldp_vty_interface(vty, 0, ifname));
 }
 
-DEFUN  (ldp_neighbor_ipv4_targeted,
+DEFPY  (no_ldp_interface,
+       no_ldp_interface_cmd,
+       "no interface IFNAME$ifname",
+       "Negate a command or set its defaults\n"
+       "Enable LDP on an interface and enter interface submode\n"
+       "Interface's name\n")
+{
+       return (ldp_vty_interface(vty, "no", ifname));
+}
+
+DEFPY  (ldp_neighbor_ipv4_targeted,
        ldp_neighbor_ipv4_targeted_cmd,
-       "[no] neighbor A.B.C.D targeted",
+       "[no] neighbor A.B.C.D$address targeted",
        "Negate a command or set its defaults\n"
        "Configure neighbor parameters\n"
        "IP address of neighbor\n"
        "Establish targeted session\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *address;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "A.B.C.D", &idx);
-       address = argv[idx]->arg;
-
-       return (ldp_vty_neighbor_targeted(vty, negate, address));
+       return (ldp_vty_neighbor_targeted(vty, no, address_str));
 }
 
-DEFUN  (ldp_neighbor_ipv6_targeted,
+DEFPY  (ldp_neighbor_ipv6_targeted,
        ldp_neighbor_ipv6_targeted_cmd,
-       "[no] neighbor X:X::X:X targeted",
+       "[no] neighbor X:X::X:X$address targeted",
        "Negate a command or set its defaults\n"
        "Configure neighbor parameters\n"
        "IPv6 address of neighbor\n"
        "Establish targeted session\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *address;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "X:X::X:X", &idx);
-       address = argv[idx]->arg;
-
-       return (ldp_vty_neighbor_targeted(vty, negate, address));
+       return (ldp_vty_neighbor_targeted(vty, no, address_str));
 }
 
-DEFUN  (ldp_bridge,
+DEFPY  (ldp_bridge,
        ldp_bridge_cmd,
-       "[no] bridge IFNAME",
+       "[no] bridge IFNAME$ifname",
        "Negate a command or set its defaults\n"
        "Bridge interface\n"
        "Interface's name\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *ifname;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "IFNAME", &idx);
-       ifname = argv[idx]->arg;
-
-       return (ldp_vty_l2vpn_bridge(vty, negate, ifname));
+       return (ldp_vty_l2vpn_bridge(vty, no, ifname));
 }
 
-DEFUN  (ldp_mtu,
+DEFPY  (ldp_mtu,
        ldp_mtu_cmd,
-       "[no] mtu (1500-9180)",
+       "[no] mtu (1500-9180)$mtu",
        "Negate a command or set its defaults\n"
        "Set Maximum Transmission Unit\n"
        "Maximum Transmission Unit value\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *mtu;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "(1500-9180)", &idx);
-       mtu = argv[idx]->arg;
-
-       return (ldp_vty_l2vpn_mtu(vty, negate, mtu));
+       return (ldp_vty_l2vpn_mtu(vty, no, mtu));
 }
 
-DEFUN  (ldp_member_interface,
+DEFPY  (ldp_member_interface,
        ldp_member_interface_cmd,
-       "[no] member interface IFNAME",
+       "[no] member interface IFNAME$ifname",
        "Negate a command or set its defaults\n"
        "L2VPN member configuration\n"
        "Local interface\n"
        "Interface's name\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *ifname;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "IFNAME", &idx);
-       ifname = argv[idx]->arg;
-
-       return (ldp_vty_l2vpn_interface(vty, negate, ifname));
+       return (ldp_vty_l2vpn_interface(vty, no, ifname));
 }
 
 DEFUN_NOSH(ldp_member_pseudowire,
        ldp_member_pseudowire_cmd,
-       "[no] member pseudowire IFNAME",
-       "Negate a command or set its defaults\n"
+       "member pseudowire IFNAME",
        "L2VPN member configuration\n"
        "Pseudowire interface\n"
        "Interface's name\n")
 {
        int              idx = 0;
-       int              negate = 0;
        const char      *ifname;
 
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
        argv_find(argv, argc, "IFNAME", &idx);
        ifname = argv[idx]->arg;
 
-       return (ldp_vty_l2vpn_pseudowire(vty, negate, ifname));
+       return (ldp_vty_l2vpn_pseudowire(vty, 0, ifname));
 }
 
-DEFUN  (ldp_vc_type,
+DEFPY  (no_ldp_member_pseudowire,
+       no_ldp_member_pseudowire_cmd,
+       "no member pseudowire IFNAME$ifname",
+       "Negate a command or set its defaults\n"
+       "L2VPN member configuration\n"
+       "Pseudowire interface\n"
+       "Interface's name\n")
+{
+       return (ldp_vty_l2vpn_pseudowire(vty, "no", ifname));
+}
+
+DEFPY  (ldp_vc_type,
        ldp_vc_type_cmd,
-       "[no] vc type <ethernet|ethernet-tagged>",
+       "[no] vc type <ethernet|ethernet-tagged>$vc_type",
        "Negate a command or set its defaults\n"
        "Virtual Circuit options\n"
        "Virtual Circuit type to use\n"
        "Ethernet (type 5)\n"
        "Ethernet-tagged (type 4)\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *vc_type;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "type", &idx);
-       vc_type = argv[idx + 1]->text;
-
-       return (ldp_vty_l2vpn_pwtype(vty, negate, vc_type));
+       return (ldp_vty_l2vpn_pwtype(vty, no, vc_type));
 }
 
-DEFUN  (ldp_control_word,
+DEFPY  (ldp_control_word,
        ldp_control_word_cmd,
-       "[no] control-word <exclude|include>",
+       "[no] control-word <exclude|include>$preference",
        "Negate a command or set its defaults\n"
        "Control-word options\n"
        "Exclude control-word in pseudowire packets\n"
        "Include control-word in pseudowire packets\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *preference;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "control-word", &idx);
-       preference = argv[idx + 1]->text;
-
-       return (ldp_vty_l2vpn_pw_cword(vty, negate, preference));
+       return (ldp_vty_l2vpn_pw_cword(vty, no, preference));
 }
 
-DEFUN  (ldp_neighbor_address,
+DEFPY  (ldp_neighbor_address,
        ldp_neighbor_address_cmd,
-       "[no] neighbor address <A.B.C.D|X:X::X:X>",
+       "[no] neighbor address <A.B.C.D|X:X::X:X>$pw_address",
        "Negate a command or set its defaults\n"
        "Remote endpoint configuration\n"
        "Specify the IPv4 or IPv6 address of the remote endpoint\n"
        "IPv4 address\n"
        "IPv6 address\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *address;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "address", &idx);
-       address = argv[idx + 1]->arg;
-
-       return (ldp_vty_l2vpn_pw_nbr_addr(vty, negate, address));
+       return (ldp_vty_l2vpn_pw_nbr_addr(vty, no, pw_address_str));
 }
 
-DEFUN  (ldp_neighbor_lsr_id,
+DEFPY  (ldp_neighbor_lsr_id,
        ldp_neighbor_lsr_id_cmd,
-       "[no] neighbor lsr-id A.B.C.D",
+       "[no] neighbor lsr-id A.B.C.D$address",
        "Negate a command or set its defaults\n"
        "Remote endpoint configuration\n"
        "Specify the LSR-ID of the remote endpoint\n"
        "IPv4 address\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *address;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "A.B.C.D", &idx);
-       address = argv[idx]->arg;
-
-       return (ldp_vty_l2vpn_pw_nbr_id(vty, negate, address));
+       return (ldp_vty_l2vpn_pw_nbr_id(vty, no, address));
 }
 
-DEFUN  (ldp_pw_id,
+DEFPY  (ldp_pw_id,
        ldp_pw_id_cmd,
-       "[no] pw-id (1-4294967295)",
+       "[no] pw-id (1-4294967295)$pwid",
        "Negate a command or set its defaults\n"
        "Set the Virtual Circuit ID\n"
        "Virtual Circuit ID value\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *pwid;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "(1-4294967295)", &idx);
-       pwid = argv[idx]->arg;
-
-       return (ldp_vty_l2vpn_pw_pwid(vty, negate, pwid));
+       return (ldp_vty_l2vpn_pw_pwid(vty, no, pwid));
 }
 
-DEFUN  (ldp_pw_status_disable,
+DEFPY  (ldp_pw_status_disable,
        ldp_pw_status_disable_cmd,
        "[no] pw-status disable",
        "Negate a command or set its defaults\n"
        "Configure PW status\n"
        "Disable PW status\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-
-       return (ldp_vty_l2vpn_pw_pwstatus(vty, negate));
+       return (ldp_vty_l2vpn_pw_pwstatus(vty, no));
 }
 
-DEFUN  (ldp_clear_mpls_ldp_neighbor,
+DEFPY  (ldp_clear_mpls_ldp_neighbor,
        ldp_clear_mpls_ldp_neighbor_cmd,
-       "clear mpls ldp neighbor [<A.B.C.D|X:X::X:X>]",
+       "clear mpls ldp neighbor [<A.B.C.D|X:X::X:X>]$address",
        "Reset functions\n"
        "Reset MPLS statistical information\n"
        "Clear LDP state\n"
@@ -746,18 +516,12 @@ DEFUN  (ldp_clear_mpls_ldp_neighbor,
        "IPv4 address\n"
        "IPv6 address\n")
 {
-       int              idx = 0;
-       const char      *address = NULL;
-
-       if (argv_find(argv, argc, "neighbor", &idx))
-               address = argv[idx + 1]->arg;
-
-       return (ldp_vty_clear_nbr(vty, address));
+       return (ldp_vty_clear_nbr(vty, address_str));
 }
 
-DEFUN  (ldp_debug_mpls_ldp_discovery_hello,
+DEFPY  (ldp_debug_mpls_ldp_discovery_hello,
        ldp_debug_mpls_ldp_discovery_hello_cmd,
-       "[no] debug mpls ldp discovery hello <recv|sent>",
+       "[no] debug mpls ldp discovery hello <recv|sent>$dir",
        "Negate a command or set its defaults\n"
        "Debugging functions\n"
        "MPLS information\n"
@@ -767,21 +531,12 @@ DEFUN  (ldp_debug_mpls_ldp_discovery_hello,
        "Received messages\n"
        "Sent messages\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *dir;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "hello", &idx);
-       dir = argv[idx + 1]->text;
-
-       return (ldp_vty_debug(vty, negate, "discovery", dir, 0));
+       return (ldp_vty_debug(vty, no, "discovery", dir, NULL));
 }
 
-DEFUN  (ldp_debug_mpls_ldp_type,
+DEFPY  (ldp_debug_mpls_ldp_type,
        ldp_debug_mpls_ldp_type_cmd,
-       "[no] debug mpls ldp <errors|event|zebra>",
+       "[no] debug mpls ldp <errors|event|zebra>$type",
        "Negate a command or set its defaults\n"
        "Debugging functions\n"
        "MPLS information\n"
@@ -790,21 +545,12 @@ DEFUN  (ldp_debug_mpls_ldp_type,
        "LDP event information\n"
        "LDP zebra information\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       const char      *type;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       argv_find(argv, argc, "ldp", &idx);
-       type = argv[idx + 1]->text;
-
-       return (ldp_vty_debug(vty, negate, type, NULL, 0));
+       return (ldp_vty_debug(vty, no, type, NULL, NULL));
 }
 
-DEFUN  (ldp_debug_mpls_ldp_messages_recv,
+DEFPY  (ldp_debug_mpls_ldp_messages_recv,
        ldp_debug_mpls_ldp_messages_recv_cmd,
-       "[no] debug mpls ldp messages recv [all]",
+       "[no] debug mpls ldp messages recv [all]$all",
        "Negate a command or set its defaults\n"
        "Debugging functions\n"
        "MPLS information\n"
@@ -813,21 +559,12 @@ DEFUN  (ldp_debug_mpls_ldp_messages_recv,
        "Received messages, excluding periodic Keep Alives\n"
        "Received messages, including periodic Keep Alives\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       int              all = 0;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       if (argv_find(argv, argc, "all", &idx))
-               all = 1;
-
-       return (ldp_vty_debug(vty, negate, "messages", "recv", all));
+       return (ldp_vty_debug(vty, no, "messages", "recv", all));
 }
 
-DEFUN  (ldp_debug_mpls_ldp_messages_sent,
+DEFPY  (ldp_debug_mpls_ldp_messages_sent,
        ldp_debug_mpls_ldp_messages_sent_cmd,
-       "[no] debug mpls ldp messages sent [all]",
+       "[no] debug mpls ldp messages sent [all]$all",
        "Negate a command or set its defaults\n"
        "Debugging functions\n"
        "MPLS information\n"
@@ -836,21 +573,12 @@ DEFUN  (ldp_debug_mpls_ldp_messages_sent,
        "Sent messages, excluding periodic Keep Alives\n"
        "Sent messages, including periodic Keep Alives\n")
 {
-       int              idx = 0;
-       int              negate = 0;
-       int              all = 0;
-
-       if (argv_find(argv, argc, "no", &idx))
-               negate = 1;
-       if (argv_find(argv, argc, "all", &idx))
-               all = 1;
-
-       return (ldp_vty_debug(vty, negate, "messages", "sent", all));
+       return (ldp_vty_debug(vty, no, "messages", "sent", all));
 }
 
-DEFUN  (ldp_show_mpls_ldp_binding,
+DEFPY  (ldp_show_mpls_ldp_binding,
        ldp_show_mpls_ldp_binding_cmd,
-       "show mpls ldp [<ipv4|ipv6>] binding [detail] [json]",
+       "show mpls ldp [<ipv4|ipv6>]$af binding [detail]$detail [json]$json",
        "Show running system information\n"
        "MPLS information\n"
        "Label Distribution Protocol\n"
@@ -860,25 +588,12 @@ DEFUN  (ldp_show_mpls_ldp_binding,
        "Show detailed information\n"
        "JavaScript Object Notation\n")
 {
-       int              idx = 0;
-       const char      *af = NULL;
-       int              detail = 0;
-       int              json = 0;
-
-       if (argv_find(argv, argc, "ipv4", &idx) ||
-           argv_find(argv, argc, "ipv6", &idx))
-               af = argv[idx]->text;
-       if (argv_find(argv, argc, "detail", &idx))
-               detail = 1;
-       if (argv_find(argv, argc, "json", &idx))
-               json = 1;
-
        return (ldp_vty_show_binding(vty, af, detail, json));
 }
 
-DEFUN  (ldp_show_mpls_ldp_discovery,
+DEFPY  (ldp_show_mpls_ldp_discovery,
        ldp_show_mpls_ldp_discovery_cmd,
-       "show mpls ldp [<ipv4|ipv6>] discovery [detail] [json]",
+       "show mpls ldp [<ipv4|ipv6>]$af discovery [detail]$detail [json]$json",
        "Show running system information\n"
        "MPLS information\n"
        "Label Distribution Protocol\n"
@@ -888,25 +603,12 @@ DEFUN  (ldp_show_mpls_ldp_discovery,
        "Show detailed information\n"
        "JavaScript Object Notation\n")
 {
-       int              idx = 0;
-       const char      *af = NULL;
-       int              detail = 0;
-       int              json = 0;
-
-       if (argv_find(argv, argc, "ipv4", &idx) ||
-           argv_find(argv, argc, "ipv6", &idx))
-               af = argv[idx]->text;
-       if (argv_find(argv, argc, "detail", &idx))
-               detail = 1;
-       if (argv_find(argv, argc, "json", &idx))
-               json = 1;
-
        return (ldp_vty_show_discovery(vty, af, detail, json));
 }
 
-DEFUN  (ldp_show_mpls_ldp_interface,
+DEFPY  (ldp_show_mpls_ldp_interface,
        ldp_show_mpls_ldp_interface_cmd,
-       "show mpls ldp [<ipv4|ipv6>] interface [json]",
+       "show mpls ldp [<ipv4|ipv6>]$af interface [json]$json",
        "Show running system information\n"
        "MPLS information\n"
        "Label Distribution Protocol\n"
@@ -915,40 +617,24 @@ DEFUN  (ldp_show_mpls_ldp_interface,
        "interface information\n"
        "JavaScript Object Notation\n")
 {
-       int              idx = 0;
-       const char      *af = NULL;
-       int              json = 0;
-
-       if (argv_find(argv, argc, "ipv4", &idx) ||
-           argv_find(argv, argc, "ipv6", &idx))
-               af = argv[idx]->text;
-       if (argv_find(argv, argc, "json", &idx))
-               json = 1;
-
        return (ldp_vty_show_interface(vty, af, json));
 }
 
-DEFUN  (ldp_show_mpls_ldp_capabilities,
+DEFPY  (ldp_show_mpls_ldp_capabilities,
        ldp_show_mpls_ldp_capabilities_cmd,
-       "show mpls ldp capabilities [json]",
+       "show mpls ldp capabilities [json]$json",
        "Show running system information\n"
        "MPLS information\n"
        "Label Distribution Protocol\n"
        "Display LDP Capabilities information\n"
        "JavaScript Object Notation\n")
 {
-       int              idx = 0;
-       int              json = 0;
-
-       if (argv_find(argv, argc, "json", &idx))
-               json = 1;
-
        return (ldp_vty_show_capabilities(vty, json));
 }
 
-DEFUN  (ldp_show_mpls_ldp_neighbor,
+DEFPY  (ldp_show_mpls_ldp_neighbor,
        ldp_show_mpls_ldp_neighbor_cmd,
-       "show mpls ldp neighbor [detail] [json]",
+       "show mpls ldp neighbor [detail]$detail [json]$json",
        "Show running system information\n"
        "MPLS information\n"
        "Label Distribution Protocol\n"
@@ -956,21 +642,12 @@ DEFUN  (ldp_show_mpls_ldp_neighbor,
        "Show detailed information\n"
        "JavaScript Object Notation\n")
 {
-       int              idx = 0;
-       int              detail = 0;
-       int              json = 0;
-
-       if (argv_find(argv, argc, "detail", &idx))
-               detail = 1;
-       if (argv_find(argv, argc, "json", &idx))
-               json = 1;
-
        return (ldp_vty_show_neighbor(vty, 0, detail, json));
 }
 
-DEFUN  (ldp_show_mpls_ldp_neighbor_capabilities,
+DEFPY  (ldp_show_mpls_ldp_neighbor_capabilities,
        ldp_show_mpls_ldp_neighbor_capabilities_cmd,
-       "show mpls ldp neighbor capabilities [json]",
+       "show mpls ldp neighbor capabilities [json]$json",
        "Show running system information\n"
        "MPLS information\n"
        "Label Distribution Protocol\n"
@@ -978,52 +655,34 @@ DEFUN  (ldp_show_mpls_ldp_neighbor_capabilities,
        "Display neighbor capability information\n"
        "JavaScript Object Notation\n")
 {
-       int              idx = 0;
-       int              json = 0;
-
-       if (argv_find(argv, argc, "json", &idx))
-               json = 1;
-
-       return (ldp_vty_show_neighbor(vty, 1, 0, json));
+       return (ldp_vty_show_neighbor(vty, 1, NULL, json));
 }
 
-DEFUN  (ldp_show_l2vpn_atom_binding,
+DEFPY  (ldp_show_l2vpn_atom_binding,
        ldp_show_l2vpn_atom_binding_cmd,
-       "show l2vpn atom binding [json]",
+       "show l2vpn atom binding [json]$json",
        "Show running system information\n"
        "Show information about Layer2 VPN\n"
        "Show Any Transport over MPLS information\n"
        "Show AToM label binding information\n"
        "JavaScript Object Notation\n")
 {
-       int              idx = 0;
-       int              json = 0;
-
-       if (argv_find(argv, argc, "json", &idx))
-               json = 1;
-
        return (ldp_vty_show_atom_binding(vty, json));
 }
 
-DEFUN  (ldp_show_l2vpn_atom_vc,
+DEFPY  (ldp_show_l2vpn_atom_vc,
        ldp_show_l2vpn_atom_vc_cmd,
-       "show l2vpn atom vc [json]",
+       "show l2vpn atom vc [json]$json",
        "Show running system information\n"
        "Show information about Layer2 VPN\n"
        "Show Any Transport over MPLS information\n"
        "Show AToM virtual circuit information\n"
        "JavaScript Object Notation\n")
 {
-       int              idx = 0;
-       int              json = 0;
-
-       if (argv_find(argv, argc, "json", &idx))
-               json = 1;
-
        return (ldp_vty_show_atom_vc(vty, json));
 }
 
-DEFUN  (ldp_show_debugging_mpls_ldp,
+DEFPY  (ldp_show_debugging_mpls_ldp,
        ldp_show_debugging_mpls_ldp_cmd,
        "show debugging mpls ldp",
        "Show running system information\n"
@@ -1034,9 +693,30 @@ DEFUN  (ldp_show_debugging_mpls_ldp,
        return (ldp_vty_show_debugging(vty));
 }
 
+static void
+l2vpn_autocomplete(vector comps, struct cmd_token *token)
+{
+       struct l2vpn    *l2vpn;
+
+       RB_FOREACH(l2vpn, l2vpn_head, &vty_conf->l2vpn_tree)
+               vector_set(comps, XSTRDUP(MTYPE_COMPLETION, l2vpn->name));
+}
+
+static const struct cmd_variable_handler l2vpn_var_handlers[] = {
+       {
+               .varname = "l2vpn_name",
+               .completions = l2vpn_autocomplete
+       },
+       {
+               .completions = NULL
+       }
+};
+
 void
 ldp_vty_init (void)
 {
+       cmd_variable_handler_register(l2vpn_var_handlers);
+
        install_node(&ldp_node, ldp_config_write);
        install_node(&ldp_ipv4_node, NULL);
        install_node(&ldp_ipv6_node, NULL);
@@ -1054,13 +734,16 @@ ldp_vty_init (void)
        install_default(LDP_PSEUDOWIRE_NODE);
 
        install_element(CONFIG_NODE, &ldp_mpls_ldp_cmd);
+       install_element(CONFIG_NODE, &no_ldp_mpls_ldp_cmd);
        install_element(CONFIG_NODE, &ldp_l2vpn_cmd);
+       install_element(CONFIG_NODE, &no_ldp_l2vpn_cmd);
        install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_discovery_hello_cmd);
        install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_type_cmd);
        install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_messages_recv_cmd);
        install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_messages_sent_cmd);
 
        install_element(LDP_NODE, &ldp_address_family_cmd);
+       install_element(LDP_NODE, &no_ldp_address_family_cmd);
        install_element(LDP_NODE, &ldp_discovery_holdtime_cmd);
        install_element(LDP_NODE, &ldp_discovery_interval_cmd);
        install_element(LDP_NODE, &ldp_dual_stack_transport_connection_prefer_ipv4_cmd);
@@ -1080,8 +763,10 @@ ldp_vty_init (void)
        install_element(LDP_IPV4_NODE, &ldp_label_remote_accept_cmd);
        install_element(LDP_IPV4_NODE, &ldp_ttl_security_disable_cmd);
        install_element(LDP_IPV4_NODE, &ldp_interface_cmd);
+       install_element(LDP_IPV4_NODE, &no_ldp_interface_cmd);
        install_element(LDP_IPV4_NODE, &ldp_session_holdtime_cmd);
        install_element(LDP_IPV4_NODE, &ldp_neighbor_ipv4_targeted_cmd);
+       install_element(LDP_IPV4_NODE, &ldp_exit_address_family_cmd);
 
        install_element(LDP_IPV6_NODE, &ldp_discovery_holdtime_cmd);
        install_element(LDP_IPV6_NODE, &ldp_discovery_interval_cmd);
@@ -1095,6 +780,7 @@ ldp_vty_init (void)
        install_element(LDP_IPV6_NODE, &ldp_interface_cmd);
        install_element(LDP_IPV6_NODE, &ldp_session_holdtime_cmd);
        install_element(LDP_IPV6_NODE, &ldp_neighbor_ipv6_targeted_cmd);
+       install_element(LDP_IPV6_NODE, &ldp_exit_address_family_cmd);
 
        install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_holdtime_cmd);
        install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_interval_cmd);
@@ -1106,6 +792,7 @@ ldp_vty_init (void)
        install_element(LDP_L2VPN_NODE, &ldp_mtu_cmd);
        install_element(LDP_L2VPN_NODE, &ldp_member_interface_cmd);
        install_element(LDP_L2VPN_NODE, &ldp_member_pseudowire_cmd);
+       install_element(LDP_L2VPN_NODE, &no_ldp_member_pseudowire_cmd);
        install_element(LDP_L2VPN_NODE, &ldp_vc_type_cmd);
 
        install_element(LDP_PSEUDOWIRE_NODE, &ldp_control_word_cmd);
index 4e900ca93e8a32c6d66992140799ee4c515daedd..e938582d0d53096055054614387eb7dc2f162f06 100644 (file)
@@ -233,7 +233,7 @@ ldp_af_config_write(struct vty *vty, int af, struct ldpd_conf *conf,
 
        ldp_af_iface_config_write(vty, af);
 
-       vty_out (vty, "  !\n");
+       vty_out(vty, " exit-address-family\n");
 }
 
 int
@@ -407,9 +407,9 @@ ldp_iface_is_configured(struct ldpd_conf *xconf, const char *ifname)
 }
 
 int
-ldp_vty_mpls_ldp(struct vty *vty, int disable)
+ldp_vty_mpls_ldp(struct vty *vty, const char *negate)
 {
-       if (disable)
+       if (negate)
                vty_conf->flags &= ~F_LDPD_ENABLED;
        else {
                vty->node = LDP_NODE;
@@ -422,7 +422,7 @@ ldp_vty_mpls_ldp(struct vty *vty, int disable)
 }
 
 int
-ldp_vty_address_family(struct vty *vty, int disable, const char *af_str)
+ldp_vty_address_family(struct vty *vty, const char *negate, const char *af_str)
 {
        struct ldpd_af_conf     *af_conf;
        int                      af;
@@ -436,7 +436,7 @@ ldp_vty_address_family(struct vty *vty, int disable, const char *af_str)
        } else
                return (CMD_WARNING_CONFIG_FAILED);
 
-       if (disable) {
+       if (negate) {
                af_conf->flags &= ~F_LDPD_AF_ENABLED;
                ldp_config_apply(vty, vty_conf);
                return (CMD_SUCCESS);
@@ -460,23 +460,15 @@ ldp_vty_address_family(struct vty *vty, int disable, const char *af_str)
 }
 
 int
-ldp_vty_disc_holdtime(struct vty *vty, int disable, const char *hello_type_str,
-    const char *seconds_str)
+ldp_vty_disc_holdtime(struct vty *vty, const char *negate,
+    const char *hello_type_str, long secs)
 {
        struct ldpd_af_conf     *af_conf;
        struct iface            *iface;
        struct iface_af         *ia;
        int                      af;
-       char                    *ep;
-       long int                 secs;
        enum hello_type          hello_type;
 
-       secs = strtol(seconds_str, &ep, 10);
-       if (*ep != '\0' || secs < MIN_HOLDTIME || secs > MAX_HOLDTIME) {
-               vty_out (vty, "%% Invalid holdtime\n");
-               return (CMD_WARNING_CONFIG_FAILED);
-       }
-
        if (hello_type_str[0] == 'h')
                hello_type = HELLO_LINK;
        else
@@ -484,7 +476,7 @@ ldp_vty_disc_holdtime(struct vty *vty, int disable, const char *hello_type_str,
 
        switch (vty->node) {
        case LDP_NODE:
-               if (disable) {
+               if (negate) {
                        switch (hello_type) {
                        case HELLO_LINK:
                                vty_conf->lhello_holdtime = LINK_DFLT_HOLDTIME;
@@ -511,7 +503,7 @@ ldp_vty_disc_holdtime(struct vty *vty, int disable, const char *hello_type_str,
                af = ldp_vty_get_af(vty);
                af_conf = ldp_af_conf_get(vty_conf, af);
 
-               if (disable) {
+               if (negate) {
                        switch (hello_type) {
                        case HELLO_LINK:
                                af_conf->lhello_holdtime = 0;
@@ -539,7 +531,7 @@ ldp_vty_disc_holdtime(struct vty *vty, int disable, const char *hello_type_str,
                VTY_CHECK_CONTEXT(iface);
 
                ia = iface_af_get(iface, af);
-               if (disable)
+               if (negate)
                        ia->hello_holdtime = 0;
                else
                        ia->hello_holdtime = secs;
@@ -554,24 +546,15 @@ ldp_vty_disc_holdtime(struct vty *vty, int disable, const char *hello_type_str,
 }
 
 int
-ldp_vty_disc_interval(struct vty *vty, int disable, const char *hello_type_str,
-    const char *seconds_str)
+ldp_vty_disc_interval(struct vty *vty, const char *negate,
+    const char *hello_type_str, long secs)
 {
        struct ldpd_af_conf     *af_conf;
        struct iface            *iface;
        struct iface_af         *ia;
        int                      af;
-       char                    *ep;
-       long int                 secs;
        enum hello_type          hello_type;
 
-       secs = strtol(seconds_str, &ep, 10);
-       if (*ep != '\0' || secs < MIN_HELLO_INTERVAL ||
-           secs > MAX_HELLO_INTERVAL) {
-               vty_out (vty, "%% Invalid interval\n");
-               return (CMD_WARNING_CONFIG_FAILED);
-       }
-
        if (hello_type_str[0] == 'h')
                hello_type = HELLO_LINK;
        else
@@ -579,14 +562,15 @@ ldp_vty_disc_interval(struct vty *vty, int disable, const char *hello_type_str,
 
        switch (vty->node) {
        case LDP_NODE:
-               if (disable) {
+               if (negate) {
                        switch (hello_type) {
                        case HELLO_LINK:
-                               vty_conf->lhello_interval = LINK_DFLT_HOLDTIME;
+                               vty_conf->lhello_interval =
+                                   DEFAULT_HELLO_INTERVAL;
                                break;
                        case HELLO_TARGETED:
                                vty_conf->thello_interval =
-                                   TARGETED_DFLT_HOLDTIME;
+                                   DEFAULT_HELLO_INTERVAL;
                                break;
                        }
                } else {
@@ -606,7 +590,7 @@ ldp_vty_disc_interval(struct vty *vty, int disable, const char *hello_type_str,
                af = ldp_vty_get_af(vty);
                af_conf = ldp_af_conf_get(vty_conf, af);
 
-               if (disable) {
+               if (negate) {
                        switch (hello_type) {
                        case HELLO_LINK:
                                af_conf->lhello_interval = 0;
@@ -634,7 +618,7 @@ ldp_vty_disc_interval(struct vty *vty, int disable, const char *hello_type_str,
                VTY_CHECK_CONTEXT(iface);
 
                ia = iface_af_get(iface, af);
-               if (disable)
+               if (negate)
                        ia->hello_interval = 0;
                else
                        ia->hello_interval = secs;
@@ -649,7 +633,7 @@ ldp_vty_disc_interval(struct vty *vty, int disable, const char *hello_type_str,
 }
 
 int
-ldp_vty_targeted_hello_accept(struct vty *vty, int disable,
+ldp_vty_targeted_hello_accept(struct vty *vty, const char *negate,
     const char *acl_from_str)
 {
        struct ldpd_af_conf     *af_conf;
@@ -658,7 +642,7 @@ ldp_vty_targeted_hello_accept(struct vty *vty, int disable,
        af = ldp_vty_get_af(vty);
        af_conf = ldp_af_conf_get(vty_conf, af);
 
-       if (disable) {
+       if (negate) {
                af_conf->flags &= ~F_LDPD_AF_THELLO_ACCEPT;
                af_conf->acl_thello_accept_from[0] = '\0';
        } else {
@@ -676,29 +660,19 @@ ldp_vty_targeted_hello_accept(struct vty *vty, int disable,
 }
 
 int
-ldp_vty_nbr_session_holdtime(struct vty *vty, int disable,
-    const char *lsr_id_str, const char *seconds_str)
+ldp_vty_nbr_session_holdtime(struct vty *vty, const char *negate,
+    struct in_addr lsr_id, long secs)
 {
-       char                    *ep;
-       long int                 secs;
-       struct in_addr           lsr_id;
        struct nbr_params       *nbrp;
 
-       if (inet_pton(AF_INET, lsr_id_str, &lsr_id) != 1 ||
-           bad_addr_v4(lsr_id)) {
+       if (bad_addr_v4(lsr_id)) {
                vty_out (vty, "%% Malformed address\n");
                return (CMD_WARNING_CONFIG_FAILED);
        }
 
-       secs = strtol(seconds_str, &ep, 10);
-       if (*ep != '\0' || secs < MIN_KEEPALIVE || secs > MAX_KEEPALIVE) {
-               vty_out (vty, "%% Invalid holdtime\n");
-               return (CMD_SUCCESS);
-       }
-
        nbrp = nbr_params_find(vty_conf, lsr_id);
 
-       if (disable) {
+       if (negate) {
                if (nbrp == NULL)
                        return (CMD_SUCCESS);
 
@@ -722,24 +696,15 @@ ldp_vty_nbr_session_holdtime(struct vty *vty, int disable,
 }
 
 int
-ldp_vty_af_session_holdtime(struct vty *vty, int disable,
-    const char *seconds_str)
+ldp_vty_af_session_holdtime(struct vty *vty, const char *negate, long secs)
 {
        struct ldpd_af_conf     *af_conf;
        int                      af;
-       char                    *ep;
-       long int                 secs;
-
-       secs = strtol(seconds_str, &ep, 10);
-       if (*ep != '\0' || secs < MIN_KEEPALIVE || secs > MAX_KEEPALIVE) {
-               vty_out (vty, "%% Invalid holdtime\n");
-               return (CMD_SUCCESS);
-       }
 
        af = ldp_vty_get_af(vty);
        af_conf = ldp_af_conf_get(vty_conf, af);
 
-       if (disable)
+       if (negate)
                af_conf->keepalive = DEFAULT_KEEPALIVE;
        else
                af_conf->keepalive = secs;
@@ -750,7 +715,7 @@ ldp_vty_af_session_holdtime(struct vty *vty, int disable,
 }
 
 int
-ldp_vty_interface(struct vty *vty, int disable, const char *ifname)
+ldp_vty_interface(struct vty *vty, const char *negate, const char *ifname)
 {
        int                      af;
        struct iface            *iface;
@@ -759,7 +724,7 @@ ldp_vty_interface(struct vty *vty, int disable, const char *ifname)
        af = ldp_vty_get_af(vty);
        iface = if_lookup_name(vty_conf, ifname);
 
-       if (disable) {
+       if (negate) {
                if (iface == NULL)
                        return (CMD_SUCCESS);
 
@@ -812,7 +777,7 @@ ldp_vty_interface(struct vty *vty, int disable, const char *ifname)
 }
 
 int
-ldp_vty_trans_addr(struct vty *vty, int disable, const char *addr_str)
+ldp_vty_trans_addr(struct vty *vty, const char *negate, const char *addr_str)
 {
        struct ldpd_af_conf     *af_conf;
        int                      af;
@@ -820,7 +785,7 @@ ldp_vty_trans_addr(struct vty *vty, int disable, const char *addr_str)
        af = ldp_vty_get_af(vty);
        af_conf = ldp_af_conf_get(vty_conf, af);
 
-       if (disable)
+       if (negate)
                memset(&af_conf->trans_addr, 0, sizeof(af_conf->trans_addr));
        else {
                if (inet_pton(af, addr_str, &af_conf->trans_addr) != 1 ||
@@ -836,7 +801,7 @@ ldp_vty_trans_addr(struct vty *vty, int disable, const char *addr_str)
 }
 
 int
-ldp_vty_neighbor_targeted(struct vty *vty, int disable, const char *addr_str)
+ldp_vty_neighbor_targeted(struct vty *vty, const char *negate, const char *addr_str)
 {
        int                      af;
        union ldpd_addr          addr;
@@ -856,7 +821,7 @@ ldp_vty_neighbor_targeted(struct vty *vty, int disable, const char *addr_str)
 
        tnbr = tnbr_find(vty_conf, af, &addr);
 
-       if (disable) {
+       if (negate) {
                if (tnbr == NULL)
                        return (CMD_SUCCESS);
 
@@ -883,7 +848,7 @@ ldp_vty_neighbor_targeted(struct vty *vty, int disable, const char *addr_str)
 }
 
 int
-ldp_vty_label_advertise(struct vty *vty, int disable, const char *acl_to_str,
+ldp_vty_label_advertise(struct vty *vty, const char *negate, const char *acl_to_str,
     const char *acl_for_str)
 {
        struct ldpd_af_conf     *af_conf;
@@ -892,7 +857,7 @@ ldp_vty_label_advertise(struct vty *vty, int disable, const char *acl_to_str,
        af = ldp_vty_get_af(vty);
        af_conf = ldp_af_conf_get(vty_conf, af);
 
-       if (disable) {
+       if (negate) {
                af_conf->acl_label_advertise_to[0] = '\0';
                af_conf->acl_label_advertise_for[0] = '\0';
        } else {
@@ -914,7 +879,7 @@ ldp_vty_label_advertise(struct vty *vty, int disable, const char *acl_to_str,
 }
 
 int
-ldp_vty_label_allocate(struct vty *vty, int disable, int host_routes,
+ldp_vty_label_allocate(struct vty *vty, const char *negate, const char *host_routes,
     const char *acl_for_str)
 {
        struct ldpd_af_conf     *af_conf;
@@ -925,7 +890,7 @@ ldp_vty_label_allocate(struct vty *vty, int disable, int host_routes,
 
        af_conf->flags &= ~F_LDPD_AF_ALLOCHOSTONLY;
        af_conf->acl_label_allocate_for[0] = '\0';
-       if (!disable) {
+       if (!negate) {
                if (host_routes)
                        af_conf->flags |= F_LDPD_AF_ALLOCHOSTONLY;
                else
@@ -939,7 +904,7 @@ ldp_vty_label_allocate(struct vty *vty, int disable, int host_routes,
 }
 
 int
-ldp_vty_label_expnull(struct vty *vty, int disable, const char *acl_for_str)
+ldp_vty_label_expnull(struct vty *vty, const char *negate, const char *acl_for_str)
 {
        struct ldpd_af_conf     *af_conf;
        int                      af;
@@ -947,7 +912,7 @@ ldp_vty_label_expnull(struct vty *vty, int disable, const char *acl_for_str)
        af = ldp_vty_get_af(vty);
        af_conf = ldp_af_conf_get(vty_conf, af);
 
-       if (disable) {
+       if (negate) {
                af_conf->flags &= ~F_LDPD_AF_EXPNULL;
                af_conf->acl_label_expnull_for[0] = '\0';
        } else {
@@ -965,7 +930,7 @@ ldp_vty_label_expnull(struct vty *vty, int disable, const char *acl_for_str)
 }
 
 int
-ldp_vty_label_accept(struct vty *vty, int disable, const char *acl_from_str,
+ldp_vty_label_accept(struct vty *vty, const char *negate, const char *acl_from_str,
     const char *acl_for_str)
 {
        struct ldpd_af_conf     *af_conf;
@@ -974,7 +939,7 @@ ldp_vty_label_accept(struct vty *vty, int disable, const char *acl_from_str,
        af = ldp_vty_get_af(vty);
        af_conf = ldp_af_conf_get(vty_conf, af);
 
-       if (disable) {
+       if (negate) {
                af_conf->acl_label_accept_from[0] = '\0';
                af_conf->acl_label_accept_for[0] = '\0';
        } else {
@@ -996,7 +961,7 @@ ldp_vty_label_accept(struct vty *vty, int disable, const char *acl_from_str,
 }
 
 int
-ldp_vty_ttl_security(struct vty *vty, int disable)
+ldp_vty_ttl_security(struct vty *vty, const char *negate)
 {
        struct ldpd_af_conf     *af_conf;
        int                      af;
@@ -1004,7 +969,7 @@ ldp_vty_ttl_security(struct vty *vty, int disable)
        af = ldp_vty_get_af(vty);
        af_conf = ldp_af_conf_get(vty_conf, af);
 
-       if (disable)
+       if (negate)
                af_conf->flags &= ~F_LDPD_AF_NO_GTSM;
        else
                af_conf->flags |= F_LDPD_AF_NO_GTSM;
@@ -1015,16 +980,16 @@ ldp_vty_ttl_security(struct vty *vty, int disable)
 }
 
 int
-ldp_vty_router_id(struct vty *vty, int disable, const char *addr_str)
+ldp_vty_router_id(struct vty *vty, const char *negate, struct in_addr address)
 {
-       if (disable)
+       if (negate)
                vty_conf->rtr_id.s_addr = INADDR_ANY;
        else {
-               if (inet_pton(AF_INET, addr_str, &vty_conf->rtr_id) != 1 ||
-                   bad_addr_v4(vty_conf->rtr_id)) {
+               if (bad_addr_v4(address)) {
                        vty_out (vty, "%% Malformed address\n");
                        return (CMD_SUCCESS);
                }
+               vty_conf->rtr_id = address;
        }
 
        ldp_config_apply(vty, vty_conf);
@@ -1033,9 +998,9 @@ ldp_vty_router_id(struct vty *vty, int disable, const char *addr_str)
 }
 
 int
-ldp_vty_ds_cisco_interop(struct vty *vty, int disable)
+ldp_vty_ds_cisco_interop(struct vty *vty, const char * negate)
 {
-       if (disable)
+       if (negate)
                vty_conf->flags &= ~F_LDPD_DS_CISCO_INTEROP;
        else
                vty_conf->flags |= F_LDPD_DS_CISCO_INTEROP;
@@ -1046,9 +1011,9 @@ ldp_vty_ds_cisco_interop(struct vty *vty, int disable)
 }
 
 int
-ldp_vty_trans_pref_ipv4(struct vty *vty, int disable)
+ldp_vty_trans_pref_ipv4(struct vty *vty, const char *negate)
 {
-       if (disable)
+       if (negate)
                vty_conf->trans_pref = DUAL_STACK_LDPOV6;
        else
                vty_conf->trans_pref = DUAL_STACK_LDPOV4;
@@ -1059,22 +1024,20 @@ ldp_vty_trans_pref_ipv4(struct vty *vty, int disable)
 }
 
 int
-ldp_vty_neighbor_password(struct vty *vty, int disable, const char *lsr_id_str,
+ldp_vty_neighbor_password(struct vty *vty, const char *negate, struct in_addr lsr_id,
     const char *password_str)
 {
-       struct in_addr           lsr_id;
        size_t                   password_len;
        struct nbr_params       *nbrp;
 
-       if (inet_pton(AF_INET, lsr_id_str, &lsr_id) != 1 ||
-           bad_addr_v4(lsr_id)) {
+       if (bad_addr_v4(lsr_id)) {
                vty_out (vty, "%% Malformed address\n");
                return (CMD_WARNING_CONFIG_FAILED);
        }
 
        nbrp = nbr_params_find(vty_conf, lsr_id);
 
-       if (disable) {
+       if (negate) {
                if (nbrp == NULL)
                        return (CMD_SUCCESS);
 
@@ -1104,16 +1067,14 @@ ldp_vty_neighbor_password(struct vty *vty, int disable, const char *lsr_id_str,
 }
 
 int
-ldp_vty_neighbor_ttl_security(struct vty *vty, int disable,
-    const char *lsr_id_str, const char *hops_str)
+ldp_vty_neighbor_ttl_security(struct vty *vty, const char *negate,
+    struct in_addr lsr_id, const char *hops_str)
 {
-       struct in_addr           lsr_id;
        struct nbr_params       *nbrp;
        long int                 hops = 0;
        char                    *ep;
 
-       if (inet_pton(AF_INET, lsr_id_str, &lsr_id) != 1 ||
-           bad_addr_v4(lsr_id)) {
+       if (bad_addr_v4(lsr_id)) {
                vty_out (vty, "%% Malformed address\n");
                return (CMD_WARNING_CONFIG_FAILED);
        }
@@ -1128,7 +1089,7 @@ ldp_vty_neighbor_ttl_security(struct vty *vty, int disable,
 
        nbrp = nbr_params_find(vty_conf, lsr_id);
 
-       if (disable) {
+       if (negate) {
                if (nbrp == NULL)
                        return (CMD_SUCCESS);
 
@@ -1158,7 +1119,7 @@ ldp_vty_neighbor_ttl_security(struct vty *vty, int disable,
 }
 
 int
-ldp_vty_l2vpn(struct vty *vty, int disable, const char *name_str)
+ldp_vty_l2vpn(struct vty *vty, const char *negate, const char *name_str)
 {
        struct l2vpn            *l2vpn;
        struct l2vpn_if         *lif;
@@ -1166,7 +1127,7 @@ ldp_vty_l2vpn(struct vty *vty, int disable, const char *name_str)
 
        l2vpn = l2vpn_find(vty_conf, name_str);
 
-       if (disable) {
+       if (negate) {
                if (l2vpn == NULL)
                        return (CMD_SUCCESS);
 
@@ -1203,11 +1164,11 @@ ldp_vty_l2vpn(struct vty *vty, int disable, const char *name_str)
 }
 
 int
-ldp_vty_l2vpn_bridge(struct vty *vty, int disable, const char *ifname)
+ldp_vty_l2vpn_bridge(struct vty *vty, const char *negate, const char *ifname)
 {
        VTY_DECLVAR_CONTEXT(l2vpn, l2vpn);
 
-       if (disable)
+       if (negate)
                memset(l2vpn->br_ifname, 0, sizeof(l2vpn->br_ifname));
        else
                strlcpy(l2vpn->br_ifname, ifname, sizeof(l2vpn->br_ifname));
@@ -1218,19 +1179,11 @@ ldp_vty_l2vpn_bridge(struct vty *vty, int disable, const char *ifname)
 }
 
 int
-ldp_vty_l2vpn_mtu(struct vty *vty, int disable, const char *mtu_str)
+ldp_vty_l2vpn_mtu(struct vty *vty, const char *negate, long mtu)
 {
        VTY_DECLVAR_CONTEXT(l2vpn, l2vpn);
-       char                    *ep;
-       int                      mtu;
-
-       mtu = strtol(mtu_str, &ep, 10);
-       if (*ep != '\0' || mtu < MIN_L2VPN_MTU || mtu > MAX_L2VPN_MTU) {
-               vty_out (vty, "%% Invalid MTU\n");
-               return (CMD_WARNING_CONFIG_FAILED);
-       }
 
-       if (disable)
+       if (negate)
                l2vpn->mtu = DEFAULT_L2VPN_MTU;
        else
                l2vpn->mtu = mtu;
@@ -1241,7 +1194,7 @@ ldp_vty_l2vpn_mtu(struct vty *vty, int disable, const char *mtu_str)
 }
 
 int
-ldp_vty_l2vpn_pwtype(struct vty *vty, int disable, const char *type_str)
+ldp_vty_l2vpn_pwtype(struct vty *vty, const char *negate, const char *type_str)
 {
        VTY_DECLVAR_CONTEXT(l2vpn, l2vpn);
        int                      pw_type;
@@ -1251,7 +1204,7 @@ ldp_vty_l2vpn_pwtype(struct vty *vty, int disable, const char *type_str)
        else
                pw_type = PW_TYPE_ETHERNET_TAGGED;
 
-       if (disable)
+       if (negate)
                l2vpn->pw_type = DEFAULT_PW_TYPE;
        else
                l2vpn->pw_type = pw_type;
@@ -1262,14 +1215,14 @@ ldp_vty_l2vpn_pwtype(struct vty *vty, int disable, const char *type_str)
 }
 
 int
-ldp_vty_l2vpn_interface(struct vty *vty, int disable, const char *ifname)
+ldp_vty_l2vpn_interface(struct vty *vty, const char *negate, const char *ifname)
 {
        VTY_DECLVAR_CONTEXT(l2vpn, l2vpn);
        struct l2vpn_if         *lif;
 
        lif = l2vpn_if_find(l2vpn, ifname);
 
-       if (disable) {
+       if (negate) {
                if (lif == NULL)
                        return (CMD_SUCCESS);
 
@@ -1300,14 +1253,14 @@ ldp_vty_l2vpn_interface(struct vty *vty, int disable, const char *ifname)
 }
 
 int
-ldp_vty_l2vpn_pseudowire(struct vty *vty, int disable, const char *ifname)
+ldp_vty_l2vpn_pseudowire(struct vty *vty, const char *negate, const char *ifname)
 {
        VTY_DECLVAR_CONTEXT(l2vpn, l2vpn);
        struct l2vpn_pw         *pw;
 
        pw = l2vpn_pw_find(l2vpn, ifname);
 
-       if (disable) {
+       if (negate) {
                if (pw == NULL)
                        return (CMD_SUCCESS);
 
@@ -1346,11 +1299,11 @@ ldp_vty_l2vpn_pseudowire(struct vty *vty, int disable, const char *ifname)
 }
 
 int
-ldp_vty_l2vpn_pw_cword(struct vty *vty, int disable, const char *preference_str)
+ldp_vty_l2vpn_pw_cword(struct vty *vty, const char *negate, const char *preference_str)
 {
        VTY_DECLVAR_CONTEXT_SUB(l2vpn_pw, pw);
 
-       if (disable)
+       if (negate)
                pw->flags |= F_PW_CWORD_CONF;
        else {
                if (preference_str[0] == 'e')
@@ -1365,7 +1318,7 @@ ldp_vty_l2vpn_pw_cword(struct vty *vty, int disable, const char *preference_str)
 }
 
 int
-ldp_vty_l2vpn_pw_nbr_addr(struct vty *vty, int disable, const char *addr_str)
+ldp_vty_l2vpn_pw_nbr_addr(struct vty *vty, const char *negate, const char *addr_str)
 {
        VTY_DECLVAR_CONTEXT_SUB(l2vpn_pw, pw);
        int                      af;
@@ -1377,7 +1330,7 @@ ldp_vty_l2vpn_pw_nbr_addr(struct vty *vty, int disable, const char *addr_str)
                return (CMD_WARNING_CONFIG_FAILED);
        }
 
-       if (disable) {
+       if (negate) {
                pw->af = AF_UNSPEC;
                memset(&pw->addr, 0, sizeof(pw->addr));
                pw->flags &= ~F_PW_STATIC_NBR_ADDR;
@@ -1393,18 +1346,16 @@ ldp_vty_l2vpn_pw_nbr_addr(struct vty *vty, int disable, const char *addr_str)
 }
 
 int
-ldp_vty_l2vpn_pw_nbr_id(struct vty *vty, int disable, const char *lsr_id_str)
+ldp_vty_l2vpn_pw_nbr_id(struct vty *vty, const char *negate, struct in_addr lsr_id)
 {
        VTY_DECLVAR_CONTEXT_SUB(l2vpn_pw, pw);
-       struct in_addr           lsr_id;
 
-       if (inet_pton(AF_INET, lsr_id_str, &lsr_id) != 1 ||
-           bad_addr_v4(lsr_id)) {
+       if (bad_addr_v4(lsr_id)) {
                vty_out (vty, "%% Malformed address\n");
                return (CMD_WARNING_CONFIG_FAILED);
        }
 
-       if (disable)
+       if (negate)
                pw->lsr_id.s_addr = INADDR_ANY;
        else
                pw->lsr_id = lsr_id;
@@ -1415,19 +1366,11 @@ ldp_vty_l2vpn_pw_nbr_id(struct vty *vty, int disable, const char *lsr_id_str)
 }
 
 int
-ldp_vty_l2vpn_pw_pwid(struct vty *vty, int disable, const char *pwid_str)
+ldp_vty_l2vpn_pw_pwid(struct vty *vty, const char *negate, long pwid)
 {
        VTY_DECLVAR_CONTEXT_SUB(l2vpn_pw, pw);
-       char                    *ep;
-       uint32_t                 pwid;
-
-       pwid = strtol(pwid_str, &ep, 10);
-       if (*ep != '\0' || pwid < MIN_PWID_ID || pwid > MAX_PWID_ID) {
-               vty_out (vty, "%% Invalid pw-id\n");
-               return (CMD_WARNING_CONFIG_FAILED);
-       }
 
-       if (disable)
+       if (negate)
                pw->pwid = 0;
        else
                pw->pwid = pwid;
@@ -1438,11 +1381,11 @@ ldp_vty_l2vpn_pw_pwid(struct vty *vty, int disable, const char *pwid_str)
 }
 
 int
-ldp_vty_l2vpn_pw_pwstatus(struct vty *vty, int disable)
+ldp_vty_l2vpn_pw_pwstatus(struct vty *vty, const char *negate)
 {
        VTY_DECLVAR_CONTEXT_SUB(l2vpn_pw, pw);
 
-       if (disable)
+       if (negate)
                pw->flags |= F_PW_STATUSTLV_CONF;
        else
                pw->flags &= ~F_PW_STATUSTLV_CONF;
index bec1375bd2a0bf8ff560f8821d14d62fbdc0b272..ad5e79c721be0e39bdd16502bfd9e037669f320c 100644 (file)
@@ -1565,7 +1565,7 @@ ldp_vty_get_af(const char *str, int *af)
 }
 
 int
-ldp_vty_show_binding(struct vty *vty, const char *af_str, int detail, int json)
+ldp_vty_show_binding(struct vty *vty, const char *af_str, const char *detail, const char *json)
 {
        struct imsgbuf           ibuf;
        struct show_params       params;
@@ -1579,8 +1579,8 @@ ldp_vty_show_binding(struct vty *vty, const char *af_str, int detail, int json)
 
        memset(&params, 0, sizeof(params));
        params.family = af;
-       params.detail = detail;
-       params.json = json;
+       params.detail = (detail) ? 1 : 0;
+       params.json = (json) ? 1 : 0;
 
        if (!params.detail && !params.json)
                vty_out (vty, "%-4s %-20s %-15s %-11s %-13s %6s\n", "AF",
@@ -1592,8 +1592,8 @@ ldp_vty_show_binding(struct vty *vty, const char *af_str, int detail, int json)
 }
 
 int
-ldp_vty_show_discovery(struct vty *vty, const char *af_str, int detail,
-    int json)
+ldp_vty_show_discovery(struct vty *vty, const char *af_str, const char *detail,
+    const char *json)
 {
        struct imsgbuf           ibuf;
        struct show_params       params;
@@ -1607,8 +1607,8 @@ ldp_vty_show_discovery(struct vty *vty, const char *af_str, int detail,
 
        memset(&params, 0, sizeof(params));
        params.family = af;
-       params.detail = detail;
-       params.json = json;
+       params.detail = (detail) ? 1 : 0;
+       params.json = (json) ? 1 : 0;
 
        if (!params.detail && !params.json)
                vty_out (vty, "%-4s %-15s %-8s %-15s %9s\n",
@@ -1623,7 +1623,7 @@ ldp_vty_show_discovery(struct vty *vty, const char *af_str, int detail,
 }
 
 int
-ldp_vty_show_interface(struct vty *vty, const char *af_str, int json)
+ldp_vty_show_interface(struct vty *vty, const char *af_str, const char *json)
 {
        struct imsgbuf           ibuf;
        struct show_params       params;
@@ -1638,7 +1638,7 @@ ldp_vty_show_interface(struct vty *vty, const char *af_str, int json)
 
        memset(&params, 0, sizeof(params));
        params.family = af;
-       params.json = json;
+       params.json = (json) ? 1 : 0;
 
        /* header */
        if (!params.json) {
@@ -1652,7 +1652,7 @@ ldp_vty_show_interface(struct vty *vty, const char *af_str, int json)
 }
 
 int
-ldp_vty_show_capabilities(struct vty *vty, int json)
+ldp_vty_show_capabilities(struct vty *vty, const char *json)
 {
        if (json) {
                json_object     *json;
@@ -1703,7 +1703,7 @@ ldp_vty_show_capabilities(struct vty *vty, int json)
 }
 
 int
-ldp_vty_show_neighbor(struct vty *vty, int capabilities, int detail, int json)
+ldp_vty_show_neighbor(struct vty *vty, int capabilities, const char *detail, const char *json)
 {
        struct imsgbuf           ibuf;
        struct show_params       params;
@@ -1713,8 +1713,8 @@ ldp_vty_show_neighbor(struct vty *vty, int capabilities, int detail, int json)
 
        memset(&params, 0, sizeof(params));
        params.capabilities = capabilities;
-       params.detail = detail;
-       params.json = json;
+       params.detail = (detail) ? 1 : 0;
+       params.json = (json) ? 1 : 0;
 
        if (params.capabilities)
                params.detail = 1;
@@ -1728,7 +1728,7 @@ ldp_vty_show_neighbor(struct vty *vty, int capabilities, int detail, int json)
 }
 
 int
-ldp_vty_show_atom_binding(struct vty *vty, int json)
+ldp_vty_show_atom_binding(struct vty *vty, const char *json)
 {
        struct imsgbuf           ibuf;
        struct show_params       params;
@@ -1737,14 +1737,14 @@ ldp_vty_show_atom_binding(struct vty *vty, int json)
                return (CMD_WARNING);
 
        memset(&params, 0, sizeof(params));
-       params.json = json;
+       params.json = (json) ? 1 : 0;
 
        imsg_compose(&ibuf, IMSG_CTL_SHOW_L2VPN_BINDING, 0, 0, -1, NULL, 0);
        return (ldp_vty_dispatch(vty, &ibuf, SHOW_L2VPN_BINDING, &params));
 }
 
 int
-ldp_vty_show_atom_vc(struct vty *vty, int json)
+ldp_vty_show_atom_vc(struct vty *vty, const char *json)
 {
        struct imsgbuf           ibuf;
        struct show_params       params;
@@ -1753,7 +1753,7 @@ ldp_vty_show_atom_vc(struct vty *vty, int json)
                return (CMD_WARNING);
 
        memset(&params, 0, sizeof(params));
-       params.json = json;
+       params.json = (json) ? 1 : 0;
 
        if (!params.json) {
                /* header */
index 7666c58a31221ab446013292ce7bf019a38dd0f4..8eef73e2435feed953c067dab46016f82dcc9633 100644 (file)
@@ -10,7 +10,7 @@
 #include "checksum.h"
 
 int /* return checksum in low-order 16 bits */
-in_cksum(void *parg, int nbytes)
+       in_cksum(void *parg, int nbytes)
 {
        u_short *ptr = parg;
        register long sum; /* assumes long == 32 bits */
index d4b628ab029ee0328169d6c1ad22bacf8d0322df..f28a55ec6db64fcf277893eb0fd5db6c47db3a38 100644 (file)
@@ -47,6 +47,74 @@ DEFINE_MTYPE(LIB, HOST, "Host config")
 DEFINE_MTYPE(LIB, STRVEC, "String vector")
 DEFINE_MTYPE(LIB, COMPLETION, "Completion item")
 
+const char *node_names[] = {
+       "auth",                     // AUTH_NODE,
+       "view",                     // VIEW_NODE,
+       "auth enable",              // AUTH_ENABLE_NODE,
+       "enable",                   // ENABLE_NODE,
+       "config",                   // CONFIG_NODE,
+       "service",                  // SERVICE_NODE,
+       "debug",                    // DEBUG_NODE,
+       "vrf debug",                // VRF_DEBUG_NODE,
+       "vnc debug",                // DEBUG_VNC_NODE,
+       "aaa",                      // AAA_NODE,
+       "keychain",                 // KEYCHAIN_NODE,
+       "keychain key",             // KEYCHAIN_KEY_NODE,
+       "logical-router",           // NS_NODE,
+       "vrf",                      // VRF_NODE,
+       "interface",                // INTERFACE_NODE,
+       "zebra",                    // ZEBRA_NODE,
+       "table",                    // TABLE_NODE,
+       "rip",                      // RIP_NODE,
+       "ripng",                    // RIPNG_NODE,
+       "babel",                    // BABEL_NODE,
+       "eigrp",                    // EIGRP_NODE,
+       "bgp",                      // BGP_NODE,
+       "bgp vpnv4",                // BGP_VPNV4_NODE,
+       "bgp vpnv6",                // BGP_VPNV6_NODE,
+       "bgp ipv4 unicast",         // BGP_IPV4_NODE,
+       "bgp ipv4 multicast",       // BGP_IPV4M_NODE,
+       "bgp ipv4 labeled unicast", // BGP_IPV4L_NODE,
+       "bgp ipv6",                 // BGP_IPV6_NODE,
+       "bgp ipv6 multicast",       // BGP_IPV6M_NODE,
+       "bgp ipv6 labeled unicast", // BGP_IPV6L_NODE,
+       "bgp vrf policy",           // BGP_VRF_POLICY_NODE,
+       "bgp vnc defaults",         // BGP_VNC_DEFAULTS_NODE,
+       "bgp vnc nve",              // BGP_VNC_NVE_GROUP_NODE,
+       "bgp vnc l2",               // BGP_VNC_L2_GROUP_NODE,
+       "rfp defaults",             // RFP_DEFAULTS_NODE,
+       "bgp evpn",                 // BGP_EVPN_NODE,
+       "ospf",                     // OSPF_NODE,
+       "ospf6",                    // OSPF6_NODE,
+       "ldp",                      // LDP_NODE,
+       "ldp ipv4",                 // LDP_IPV4_NODE,
+       "ldp ipv6",                 // LDP_IPV6_NODE,
+       "ldp ipv4 interface",       // LDP_IPV4_IFACE_NODE,
+       "ldp ipv6 interface",       // LDP_IPV6_IFACE_NODE,
+       "ldp l2vpn",                // LDP_L2VPN_NODE,
+       "ldp",                      // LDP_PSEUDOWIRE_NODE,
+       "isis",                     // ISIS_NODE,
+       "pim",                      // PIM_NODE,
+       "masc",                     // MASC_NODE,
+       "irdp",                     // IRDP_NODE,
+       "static ip",                // IP_NODE,
+       "ipv4 access list",         // ACCESS_NODE,
+       "ipv4 prefix list",         // PREFIX_NODE,
+       "ipv6 access list",         // ACCESS_IPV6_NODE,
+       "ipv6 prefix list",         // PREFIX_IPV6_NODE,
+       "as list",                  // AS_LIST_NODE,
+       "community list",           // COMMUNITY_LIST_NODE,
+       "routemap",                 // RMAP_NODE,
+       "smux",                     // SMUX_NODE,
+       "dump",                     // DUMP_NODE,
+       "forwarding",               // FORWARDING_NODE,
+       "protocol",                 // PROTOCOL_NODE,
+       "mpls",                     // MPLS_NODE,
+       "vty",                      // VTY_NODE,
+       "link-params",              // LINK_PARAMS_NODE,
+       "bgp evpn vni",             // BGP_EVPN_VNI_NODE,
+};
+
 /* Command vector which includes some level of command lists. Normally
    each daemon maintains each own cmdvec. */
 vector cmdvec = NULL;
@@ -56,23 +124,19 @@ struct host host;
 
 /* Standard command node structures. */
 static struct cmd_node auth_node = {
-       AUTH_NODE,
-       "Password: ",
+       AUTH_NODE, "Password: ",
 };
 
 static struct cmd_node view_node = {
-       VIEW_NODE,
-       "%s> ",
+       VIEW_NODE, "%s> ",
 };
 
 static struct cmd_node auth_enable_node = {
-       AUTH_ENABLE_NODE,
-       "Password: ",
+       AUTH_ENABLE_NODE, "Password: ",
 };
 
 static struct cmd_node enable_node = {
-       ENABLE_NODE,
-       "%s# ",
+       ENABLE_NODE, "%s# ",
 };
 
 static struct cmd_node config_node = {CONFIG_NODE, "%s(config)# ", 1};
@@ -653,9 +717,8 @@ void cmd_variable_complete(struct cmd_token *token, const char *arg,
        for (ALL_LIST_ELEMENTS_RO(varhandlers, ln, cvh)) {
                if (cvh->tokenname && strcmp(cvh->tokenname, token->text))
                        continue;
-               if (cvh->varname
-                   && (!token->varname
-                       || strcmp(cvh->varname, token->varname)))
+               if (cvh->varname && (!token->varname
+                                    || strcmp(cvh->varname, token->varname)))
                        continue;
                cvh->completions(tmpcomps, token);
                break;
@@ -1500,9 +1563,8 @@ DEFUN (config_write,
        struct stat conf_stat;
 
        // if command was 'write terminal' or 'show running-config'
-       if (argc == 2
-           && (strmatch(argv[idx_type]->text, "terminal")
-               || strmatch(argv[0]->text, "show"))) {
+       if (argc == 2 && (strmatch(argv[idx_type]->text, "terminal")
+                         || strmatch(argv[0]->text, "show"))) {
                vty_write_config(vty);
                return CMD_SUCCESS;
        }
@@ -2361,6 +2423,35 @@ DEFUN (no_banner_motd,
        return CMD_SUCCESS;
 }
 
+DEFUN(find,
+      find_cmd,
+      "find COMMAND...",
+      "Find CLI command containing text\n"
+      "Text to search for\n")
+{
+       char *text = argv_concat(argv, argc, 1);
+       const struct cmd_node *node;
+       const struct cmd_element *cli;
+       vector clis;
+
+       for (unsigned int i = 0; i < vector_active(cmdvec); i++) {
+               node = vector_slot(cmdvec, i);
+               if (!node)
+                       continue;
+               clis = node->cmd_vector;
+               for (unsigned int j = 0; j < vector_active(clis); j++) {
+                       cli = vector_slot(clis, j);
+                       if (strcasestr(cli->string, text))
+                               vty_out(vty, "  (%s)  %s\n",
+                                       node_names[node->node], cli->string);
+               }
+       }
+
+       XFREE(MTYPE_TMP, text);
+
+       return CMD_SUCCESS;
+}
+
 /* Set config filename.  Called from vty.c */
 void host_config_set(const char *filename)
 {
@@ -2381,6 +2472,7 @@ void install_default(enum node_type node)
        install_element(node, &config_end_cmd);
        install_element(node, &config_help_cmd);
        install_element(node, &config_list_cmd);
+       install_element(node, &find_cmd);
 
        install_element(node, &config_write_cmd);
        install_element(node, &show_running_config_cmd);
@@ -2395,6 +2487,9 @@ void install_default(enum node_type node)
  * terminal = -1 -- watchfrr / no logging, but minimal config control */
 void cmd_init(int terminal)
 {
+       if (array_size(node_names) != NODE_TYPE_MAX)
+               assert(!"Update the CLI node description array!");
+
        qobj_init();
 
        varhandlers = list_new();
@@ -2422,6 +2517,8 @@ void cmd_init(int terminal)
 
        /* Each node's basic commands. */
        install_element(VIEW_NODE, &show_version_cmd);
+       install_element(ENABLE_NODE, &show_startup_config_cmd);
+
        if (terminal) {
                install_element(VIEW_NODE, &config_list_cmd);
                install_element(VIEW_NODE, &config_exit_cmd);
@@ -2434,20 +2531,16 @@ void cmd_init(int terminal)
                install_element(VIEW_NODE, &show_commandtree_cmd);
                install_element(VIEW_NODE, &echo_cmd);
                install_element(VIEW_NODE, &autocomplete_cmd);
-       }
+               install_element(VIEW_NODE, &find_cmd);
 
-       if (terminal) {
                install_element(ENABLE_NODE, &config_end_cmd);
                install_element(ENABLE_NODE, &config_disable_cmd);
                install_element(ENABLE_NODE, &config_terminal_cmd);
                install_element(ENABLE_NODE, &copy_runningconf_startupconf_cmd);
                install_element(ENABLE_NODE, &config_write_cmd);
                install_element(ENABLE_NODE, &show_running_config_cmd);
-       }
-       install_element(ENABLE_NODE, &show_startup_config_cmd);
-
-       if (terminal) {
                install_element(ENABLE_NODE, &config_logmsg_cmd);
+
                install_default(CONFIG_NODE);
 
                thread_cmd_init();
index 5d52fe3fc3d4f656bb04953f17d2a2a5ea9e8cc3..533b4b32894a5994df5c0f3d9409642eea62ce00 100644 (file)
@@ -68,7 +68,7 @@ struct host {
        char *motdfile;
 };
 
-/* There are some command levels which called from command node. */
+/* List of CLI nodes. Please remember to update the name array in command.c. */
 enum node_type {
        AUTH_NODE,              /* Authentication mode of vty interface. */
        VIEW_NODE,              /* View node. Default mode of vty interface. */
@@ -135,8 +135,12 @@ enum node_type {
        VTY_NODE,               /* Vty node. */
        LINK_PARAMS_NODE,       /* Link-parameters node */
        BGP_EVPN_VNI_NODE,      /* BGP EVPN VNI */
+       NODE_TYPE_MAX,          /* maximum */
 };
 
+extern vector cmdvec;
+extern const char *node_names[];
+
 /* Node which has some commands and prompt string and configuration
    function pointer . */
 struct cmd_node {
index be4c39a36139c48466d981cd266466df1105a110..785d2ffa70ae86db85c5e32e5bf1665fc0e93b1f 100644 (file)
@@ -203,7 +203,7 @@ static PyObject *graph_to_pyobj(struct wrap_graph *wgraph,
                                /* plumbing types */
                                item(FORK_TKN) item(JOIN_TKN) item(START_TKN)
                                        item(END_TKN) default
-                           : wrap->type = "???";
+                               : wrap->type = "???";
                }
 
                wrap->deprecated = (tok->attr == CMD_ATTR_DEPRECATED);
index 3f52c6f06bc9797546cbabd16a210d0436361764..71799c9b6d5a8a201c3cc20a357f9453881bc194 100644 (file)
@@ -619,9 +619,8 @@ int long_only;
 
        if (longopts != NULL
            && (argv[optind][1] == '-'
-               || (long_only
-                   && (argv[optind][2]
-                       || !my_index(optstring, argv[optind][1]))))) {
+               || (long_only && (argv[optind][2]
+                                 || !my_index(optstring, argv[optind][1]))))) {
                char *nameend;
                const struct option *p;
                const struct option *pfound = NULL;
index 7adbd908d85bab569bc437a76447059bfdf4aa7c..a7714f156930e8c4d46c3da45c1188c18a44956e 100644 (file)
@@ -49,7 +49,6 @@ struct hash *hash_create_size(unsigned int size,
        hash->index =
                XCALLOC(MTYPE_HASH_INDEX, sizeof(struct hash_backet *) * size);
        hash->size = size;
-       hash->no_expand = 0;
        hash->hash_key = hash_key;
        hash->hash_cmp = hash_cmp;
        hash->count = 0;
@@ -91,7 +90,7 @@ void *hash_alloc_intern(void *arg)
 /* Expand hash if the chain length exceeds the threshold. */
 static void hash_expand(struct hash *hash)
 {
-       unsigned int i, new_size, losers;
+       unsigned int i, new_size;
        struct hash_backet *hb, *hbnext, **new_index;
 
        new_size = hash->size * 2;
@@ -128,22 +127,6 @@ static void hash_expand(struct hash *hash)
        XFREE(MTYPE_HASH_INDEX, hash->index);
        hash->size = new_size;
        hash->index = new_index;
-
-       /* Ideally, new index should have chains half as long as the original.
-        * If expansion didn't help, then not worth expanding again,
-        * the problem is the hash function. */
-       losers = 0;
-       for (i = 0; i < hash->size; i++) {
-               unsigned int len = hash->index[i] ? hash->index[i]->len : 0;
-
-               if (len > HASH_THRESHOLD / 2)
-                       ++losers;
-               if (len >= HASH_THRESHOLD)
-                       hash->no_expand = 1;
-       }
-
-       if (losers > hash->count / 2)
-               hash->no_expand = 1;
 }
 
 /* Lookup and return hash backet in hash.  If there is no
@@ -173,7 +156,7 @@ void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *))
                if (newdata == NULL)
                        return NULL;
 
-               if (len > HASH_THRESHOLD && !hash->no_expand) {
+               if (len > HASH_THRESHOLD) {
                        hash_expand(hash);
                        index = key & (hash->size - 1);
                }
index ec3766eaaafddf9563285870b97146cf0bcf2a0b..6ce29f0426dc6ff70afad24d8c0699b8b4988074 100644 (file)
@@ -64,9 +64,6 @@ struct hash {
        /* Hash table size. Must be power of 2 */
        unsigned int size;
 
-       /* If expansion failed. */
-       int no_expand;
-
        /* Key make function. */
        unsigned int (*hash_key)(void *);
 
index da3419bd27dafae3220149dd453091cde4106fa0..4a5cee2fd394ea1783cfc0c5f33c6869101ba2e9 100644 (file)
@@ -161,8 +161,7 @@ extern void _hook_unregister(struct hook *hook, void *funcptr, void *arg,
  */
 #define DEFINE_HOOK(hookname, arglist, passlist)                               \
        struct hook _hook_##hookname = {                                       \
-               .name = #hookname,                                             \
-               .entries = NULL,                                               \
+               .name = #hookname, .entries = NULL,                            \
        };                                                                     \
        static int hook_call_##hookname arglist                                \
        {                                                                      \
index 0204d325b7c3eba6b4068f1194896065a61666ea..f80ac19179527e2bf57da2d165cd6c1d90f2a06d 100644 (file)
--- a/lib/if.h
+++ b/lib/if.h
@@ -236,7 +236,7 @@ struct interface {
        unsigned int mtu; /* IPv4 MTU */
        unsigned int
                mtu6; /* IPv6 MTU - probably, but not neccessarily same as mtu
-                      */
+                        */
 
        /* Link-layer information and hardware address */
        enum zebra_link_type ll_type;
index 4068e31c51c009cd9c021e6c1b0a2ac4af89b616..a486fc17c18d35329eb245ca2d4a051ba3e3fb03 100644 (file)
 #include "openbsd-queue.h"
 #include "imsg.h"
 
-int ibuf_realloc(struct ibuf *, size_t);
-void ibuf_enqueue(struct msgbuf *, struct ibuf *);
-void ibuf_dequeue(struct msgbuf *, struct ibuf *);
+int    ibuf_realloc(struct ibuf *, size_t);
+void   ibuf_enqueue(struct msgbuf *, struct ibuf *);
+void   ibuf_dequeue(struct msgbuf *, struct ibuf *);
 
-struct ibuf *ibuf_open(size_t len)
+struct ibuf *
+ibuf_open(size_t len)
 {
-       struct ibuf *buf;
+       struct ibuf     *buf;
 
        if ((buf = calloc(1, sizeof(struct ibuf))) == NULL)
                return (NULL);
@@ -41,9 +42,10 @@ struct ibuf *ibuf_open(size_t len)
        return (buf);
 }
 
-struct ibuf *ibuf_dynamic(size_t len, size_t max)
+struct ibuf *
+ibuf_dynamic(size_t len, size_t max)
 {
-       struct ibuf *buf;
+       struct ibuf     *buf;
 
        if (max < len)
                return (NULL);
@@ -57,9 +59,10 @@ struct ibuf *ibuf_dynamic(size_t len, size_t max)
        return (buf);
 }
 
-int ibuf_realloc(struct ibuf *buf, size_t len)
+int
+ibuf_realloc(struct ibuf *buf, size_t len)
 {
-       u_char *b;
+       u_char  *b;
 
        /* on static buffers max is eq size and so the following fails */
        if (buf->wpos + len > buf->max) {
@@ -76,7 +79,8 @@ int ibuf_realloc(struct ibuf *buf, size_t len)
        return (0);
 }
 
-int ibuf_add(struct ibuf *buf, const void *data, size_t len)
+int
+ibuf_add(struct ibuf *buf, const void *data, size_t len)
 {
        if (buf->wpos + len > buf->size)
                if (ibuf_realloc(buf, len) == -1)
@@ -87,9 +91,10 @@ int ibuf_add(struct ibuf *buf, const void *data, size_t len)
        return (0);
 }
 
-void *ibuf_reserve(struct ibuf *buf, size_t len)
+void *
+ibuf_reserve(struct ibuf *buf, size_t len)
 {
-       void *b;
+       void    *b;
 
        if (buf->wpos + len > buf->size)
                if (ibuf_realloc(buf, len) == -1)
@@ -100,7 +105,8 @@ void *ibuf_reserve(struct ibuf *buf, size_t len)
        return (b);
 }
 
-void *ibuf_seek(struct ibuf *buf, size_t pos, size_t len)
+void *
+ibuf_seek(struct ibuf *buf, size_t pos, size_t len)
 {
        /* only allowed to seek in already written parts */
        if (pos + len > buf->wpos)
@@ -109,31 +115,34 @@ void *ibuf_seek(struct ibuf *buf, size_t pos, size_t len)
        return (buf->buf + pos);
 }
 
-size_t ibuf_size(struct ibuf *buf)
+size_t
+ibuf_size(struct ibuf *buf)
 {
        return (buf->wpos);
 }
 
-size_t ibuf_left(struct ibuf *buf)
+size_t
+ibuf_left(struct ibuf *buf)
 {
        return (buf->max - buf->wpos);
 }
 
-void ibuf_close(struct msgbuf *msgbuf, struct ibuf *buf)
+void
+ibuf_close(struct msgbuf *msgbuf, struct ibuf *buf)
 {
        ibuf_enqueue(msgbuf, buf);
 }
 
-int ibuf_write(struct msgbuf *msgbuf)
+int
+ibuf_write(struct msgbuf *msgbuf)
 {
-       struct iovec iov[IOV_MAX];
-       struct ibuf *buf;
-       unsigned int i = 0;
-       ssize_t n;
+       struct iovec     iov[IOV_MAX];
+       struct ibuf     *buf;
+       unsigned int     i = 0;
+       ssize_t n;
 
        memset(&iov, 0, sizeof(iov));
-       TAILQ_FOREACH(buf, &msgbuf->bufs, entry)
-       {
+       TAILQ_FOREACH(buf, &msgbuf->bufs, entry) {
                if (i >= IOV_MAX)
                        break;
                iov[i].iov_base = buf->buf + buf->rpos;
@@ -150,7 +159,7 @@ again:
                return (-1);
        }
 
-       if (n == 0) { /* connection closed */
+       if (n == 0) {                   /* connection closed */
                errno = 0;
                return (0);
        }
@@ -160,7 +169,8 @@ again:
        return (1);
 }
 
-void ibuf_free(struct ibuf *buf)
+void
+ibuf_free(struct ibuf *buf)
 {
        if (buf == NULL)
                return;
@@ -168,19 +178,21 @@ void ibuf_free(struct ibuf *buf)
        free(buf);
 }
 
-void msgbuf_init(struct msgbuf *msgbuf)
+void
+msgbuf_init(struct msgbuf *msgbuf)
 {
        msgbuf->queued = 0;
        msgbuf->fd = -1;
        TAILQ_INIT(&msgbuf->bufs);
 }
 
-void msgbuf_drain(struct msgbuf *msgbuf, size_t n)
+void
+msgbuf_drain(struct msgbuf *msgbuf, size_t n)
 {
-       struct ibuf *buf, *next;
+       struct ibuf     *buf, *next;
 
        for (buf = TAILQ_FIRST(&msgbuf->bufs); buf != NULL && n > 0;
-            buf = next) {
+           buf = next) {
                next = TAILQ_NEXT(buf, entry);
                if (buf->rpos + n >= buf->wpos) {
                        n -= buf->wpos - buf->rpos;
@@ -192,32 +204,33 @@ void msgbuf_drain(struct msgbuf *msgbuf, size_t n)
        }
 }
 
-void msgbuf_clear(struct msgbuf *msgbuf)
+void
+msgbuf_clear(struct msgbuf *msgbuf)
 {
-       struct ibuf *buf;
+       struct ibuf     *buf;
 
        while ((buf = TAILQ_FIRST(&msgbuf->bufs)) != NULL)
                ibuf_dequeue(msgbuf, buf);
 }
 
-int msgbuf_write(struct msgbuf *msgbuf)
+int
+msgbuf_write(struct msgbuf *msgbuf)
 {
-       struct iovec iov[IOV_MAX];
-       struct ibuf *buf;
-       unsigned int i = 0;
-       ssize_t n;
-       struct msghdr msg;
-       struct cmsghdr *cmsg;
+       struct iovec     iov[IOV_MAX];
+       struct ibuf     *buf;
+       unsigned int     i = 0;
+       ssize_t          n;
+       struct msghdr    msg;
+       struct cmsghdr  *cmsg;
        union {
-               struct cmsghdr hdr;
-               char buf[CMSG_SPACE(sizeof(int))];
+               struct cmsghdr  hdr;
+               char            buf[CMSG_SPACE(sizeof(int))];
        } cmsgbuf;
 
        memset(&iov, 0, sizeof(iov));
        memset(&msg, 0, sizeof(msg));
        memset(&cmsgbuf, 0, sizeof(cmsgbuf));
-       TAILQ_FOREACH(buf, &msgbuf->bufs, entry)
-       {
+       TAILQ_FOREACH(buf, &msgbuf->bufs, entry) {
                if (i >= IOV_MAX)
                        break;
                iov[i].iov_base = buf->buf + buf->rpos;
@@ -249,7 +262,7 @@ again:
                return (-1);
        }
 
-       if (n == 0) { /* connection closed */
+       if (n == 0) {                   /* connection closed */
                errno = 0;
                return (0);
        }
@@ -268,13 +281,15 @@ again:
        return (1);
 }
 
-void ibuf_enqueue(struct msgbuf *msgbuf, struct ibuf *buf)
+void
+ibuf_enqueue(struct msgbuf *msgbuf, struct ibuf *buf)
 {
        TAILQ_INSERT_TAIL(&msgbuf->bufs, buf, entry);
        msgbuf->queued++;
 }
 
-void ibuf_dequeue(struct msgbuf *msgbuf, struct ibuf *buf)
+void
+ibuf_dequeue(struct msgbuf *msgbuf, struct ibuf *buf)
 {
        TAILQ_REMOVE(&msgbuf->bufs, buf, entry);
 
index 10650f648af56da8124fc3cd5e43c356b339ae14..fc62c13734a8bbf036580cdc84f75b108f6d770e 100644 (file)
 #include "openbsd-queue.h"
 #include "imsg.h"
 
-int imsg_fd_overhead = 0;
+int     imsg_fd_overhead = 0;
 
-int imsg_get_fd(struct imsgbuf *);
+int     imsg_get_fd(struct imsgbuf *);
 
 #ifndef __OpenBSD__
 /*
  * The original code calls getdtablecount() which is OpenBSD specific. Use
  * available_fds() from OpenSMTPD instead.
  */
-static int available_fds(unsigned int n)
+static int
+available_fds(unsigned int n)
 {
-       unsigned int i;
-       int ret, fds[256];
+       unsigned int    i;
+       int             ret, fds[256];
 
-       if (n > (sizeof(fds) / sizeof(fds[0])))
+       if (n > (sizeof(fds)/sizeof(fds[0])))
                return (1);
 
        ret = 0;
@@ -58,7 +59,8 @@ static int available_fds(unsigned int n)
 }
 #endif
 
-void imsg_init(struct imsgbuf *ibuf, int fd)
+void
+imsg_init(struct imsgbuf *ibuf, int fd)
 {
        msgbuf_init(&ibuf->w);
        memset(&ibuf->r, 0, sizeof(ibuf->r));
@@ -68,18 +70,19 @@ void imsg_init(struct imsgbuf *ibuf, int fd)
        TAILQ_INIT(&ibuf->fds);
 }
 
-ssize_t imsg_read(struct imsgbuf *ibuf)
+ssize_t
+imsg_read(struct imsgbuf *ibuf)
 {
-       struct msghdr msg;
-       struct cmsghdr *cmsg;
+       struct msghdr            msg;
+       struct cmsghdr          *cmsg;
        union {
                struct cmsghdr hdr;
-               char buf[CMSG_SPACE(sizeof(int) * 1)];
+               char    buf[CMSG_SPACE(sizeof(int) * 1)];
        } cmsgbuf;
-       struct iovec iov;
-       ssize_t n = -1;
-       int fd;
-       struct imsg_fd *ifd;
+       struct iovec             iov;
+       ssize_t                  n = -1;
+       int                      fd;
+       struct imsg_fd          *ifd;
 
        memset(&msg, 0, sizeof(msg));
        memset(&cmsgbuf, 0, sizeof(cmsgbuf));
@@ -96,14 +99,12 @@ ssize_t imsg_read(struct imsgbuf *ibuf)
 
 again:
 #ifdef __OpenBSD__
-       if (getdtablecount() + imsg_fd_overhead
-                   + (int)((CMSG_SPACE(sizeof(int)) - CMSG_SPACE(0))
-                           / sizeof(int))
+       if (getdtablecount() + imsg_fd_overhead +
+           (int)((CMSG_SPACE(sizeof(int))-CMSG_SPACE(0))/sizeof(int))
            >= getdtablesize()) {
 #else
-       if (available_fds(imsg_fd_overhead
-                         + (CMSG_SPACE(sizeof(int)) - CMSG_SPACE(0))
-                                   / sizeof(int))) {
+       if (available_fds(imsg_fd_overhead +
+           (CMSG_SPACE(sizeof(int))-CMSG_SPACE(0))/sizeof(int))) {
 #endif
                errno = EAGAIN;
                free(ifd);
@@ -119,9 +120,9 @@ again:
        ibuf->r.wpos += n;
 
        for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL;
-            cmsg = CMSG_NXTHDR(&msg, cmsg)) {
-               if (cmsg->cmsg_level == SOL_SOCKET
-                   && cmsg->cmsg_type == SCM_RIGHTS) {
+           cmsg = CMSG_NXTHDR(&msg, cmsg)) {
+               if (cmsg->cmsg_level == SOL_SOCKET &&
+                   cmsg->cmsg_type == SCM_RIGHTS) {
                        int i;
                        int j;
 
@@ -130,15 +131,14 @@ again:
                         * padding rules, our control buffer might contain
                         * more than one fd, and we must close them.
                         */
-                       j = ((char *)cmsg + cmsg->cmsg_len
-                            - (char *)CMSG_DATA(cmsg))
-                           / sizeof(int);
+                       j = ((char *)cmsg + cmsg->cmsg_len -
+                           (char *)CMSG_DATA(cmsg)) / sizeof(int);
                        for (i = 0; i < j; i++) {
                                fd = ((int *)CMSG_DATA(cmsg))[i];
                                if (ifd != NULL) {
                                        ifd->fd = fd;
                                        TAILQ_INSERT_TAIL(&ibuf->fds, ifd,
-                                                         entry);
+                                           entry);
                                        ifd = NULL;
                                } else
                                        close(fd);
@@ -152,9 +152,10 @@ fail:
        return (n);
 }
 
-ssize_t imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
+ssize_t
+imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
 {
-       size_t av, left, datalen;
+       size_t                   av, left, datalen;
 
        av = ibuf->r.wpos;
 
@@ -162,7 +163,8 @@ ssize_t imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
                return (0);
 
        memcpy(&imsg->hdr, ibuf->r.buf, sizeof(imsg->hdr));
-       if (imsg->hdr.len < IMSG_HEADER_SIZE || imsg->hdr.len > MAX_IMSGSIZE) {
+       if (imsg->hdr.len < IMSG_HEADER_SIZE ||
+           imsg->hdr.len > MAX_IMSGSIZE) {
                errno = ERANGE;
                return (-1);
        }
@@ -181,7 +183,7 @@ ssize_t imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
                imsg->fd = -1;
 
        if (imsg->data)
-               memcpy(imsg->data, ibuf->r.rptr, datalen);
+         memcpy(imsg->data, ibuf->r.rptr, datalen);
 
        if (imsg->hdr.len < av) {
                left = av - imsg->hdr.len;
@@ -193,10 +195,11 @@ ssize_t imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
        return (datalen + IMSG_HEADER_SIZE);
 }
 
-int imsg_compose(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
-                pid_t pid, int fd, const void *data, u_int16_t datalen)
+int
+imsg_compose(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
+    pid_t pid, int fd, const void *data, u_int16_t datalen)
 {
-       struct ibuf *wbuf;
+       struct ibuf     *wbuf;
 
        if ((wbuf = imsg_create(ibuf, type, peerid, pid, datalen)) == NULL)
                return (-1);
@@ -211,11 +214,12 @@ int imsg_compose(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
        return (1);
 }
 
-int imsg_composev(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
-                 pid_t pid, int fd, const struct iovec *iov, int iovcnt)
+int
+imsg_composev(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
+    pid_t pid, int fd, const struct iovec *iov, int iovcnt)
 {
-       struct ibuf *wbuf;
-       int i, datalen = 0;
+       struct ibuf     *wbuf;
+       int              i, datalen = 0;
 
        for (i = 0; i < iovcnt; i++)
                datalen += iov[i].iov_len;
@@ -235,11 +239,12 @@ int imsg_composev(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
 }
 
 /* ARGSUSED */
-struct ibuf *imsg_create(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
-                        pid_t pid, u_int16_t datalen)
+struct ibuf *
+imsg_create(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
+    pid_t pid, u_int16_t datalen)
 {
-       struct ibuf *wbuf;
-       struct imsg_hdr hdr;
+       struct ibuf     *wbuf;
+       struct imsg_hdr  hdr;
 
        datalen += IMSG_HEADER_SIZE;
        if (datalen > MAX_IMSGSIZE) {
@@ -261,7 +266,8 @@ struct ibuf *imsg_create(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
        return (wbuf);
 }
 
-int imsg_add(struct ibuf *msg, const void *data, u_int16_t datalen)
+int
+imsg_add(struct ibuf *msg, const void *data, u_int16_t datalen)
 {
        if (datalen)
                if (ibuf_add(msg, data, datalen) == -1) {
@@ -271,9 +277,10 @@ int imsg_add(struct ibuf *msg, const void *data, u_int16_t datalen)
        return (datalen);
 }
 
-void imsg_close(struct imsgbuf *ibuf, struct ibuf *msg)
+void
+imsg_close(struct imsgbuf *ibuf, struct ibuf *msg)
 {
-       struct imsg_hdr *hdr;
+       struct imsg_hdr *hdr;
 
        hdr = (struct imsg_hdr *)msg->buf;
 
@@ -286,15 +293,17 @@ void imsg_close(struct imsgbuf *ibuf, struct ibuf *msg)
        ibuf_close(&ibuf->w, msg);
 }
 
-void imsg_free(struct imsg *imsg)
+void
+imsg_free(struct imsg *imsg)
 {
        free(imsg->data);
 }
 
-int imsg_get_fd(struct imsgbuf *ibuf)
+int
+imsg_get_fd(struct imsgbuf *ibuf)
 {
-       int fd;
-       struct imsg_fd *ifd;
+       int              fd;
+       struct imsg_fd  *ifd;
 
        if ((ifd = TAILQ_FIRST(&ibuf->fds)) == NULL)
                return (-1);
@@ -306,7 +315,8 @@ int imsg_get_fd(struct imsgbuf *ibuf)
        return (fd);
 }
 
-int imsg_flush(struct imsgbuf *ibuf)
+int
+imsg_flush(struct imsgbuf *ibuf)
 {
        while (ibuf->w.queued)
                if (msgbuf_write(&ibuf->w) <= 0)
@@ -314,9 +324,10 @@ int imsg_flush(struct imsgbuf *ibuf)
        return (0);
 }
 
-void imsg_clear(struct imsgbuf *ibuf)
+void
+imsg_clear(struct imsgbuf *ibuf)
 {
-       int fd;
+       int     fd;
 
        msgbuf_clear(&ibuf->w);
        while ((fd = imsg_get_fd(ibuf)) != -1)
index ddaf71344e0088cfaacc3a481dbe4e2feaca3d2d..d053d0195613be88ff3927a70dacd25f580ab3f4 100644 (file)
 #define MAX_IMSGSIZE           16384
 
 struct ibuf {
-       TAILQ_ENTRY(ibuf) entry;
-       u_char *buf;
-       size_t size;
-       size_t max;
-       size_t wpos;
-       size_t rpos;
-       int fd;
+       TAILQ_ENTRY(ibuf)        entry;
+       u_char                  *buf;
+       size_t                   size;
+       size_t                   max;
+       size_t                   wpos;
+       size_t                   rpos;
+       int                      fd;
 };
 
 struct msgbuf {
-       TAILQ_HEAD(, ibuf) bufs;
-       u_int32_t queued;
-       int fd;
+       TAILQ_HEAD(, ibuf)       bufs;
+       u_int32_t                queued;
+       int                      fd;
 };
 
 struct ibuf_read {
-       u_char buf[IBUF_READ_SIZE];
-       u_char *rptr;
-       size_t wpos;
+       u_char                   buf[IBUF_READ_SIZE];
+       u_char                  *rptr;
+       size_t                   wpos;
 };
 
 struct imsg_fd {
-       TAILQ_ENTRY(imsg_fd) entry;
-       int fd;
+       TAILQ_ENTRY(imsg_fd)    entry;
+       int                     fd;
 };
 
 struct imsgbuf {
-       TAILQ_HEAD(, imsg_fd) fds;
-       struct ibuf_read r;
-       struct msgbuf w;
-       int fd;
-       pid_t pid;
+       TAILQ_HEAD(, imsg_fd)    fds;
+       struct ibuf_read         r;
+       struct msgbuf            w;
+       int                      fd;
+       pid_t                    pid;
 };
 
 #define IMSGF_HASFD    1
 
 struct imsg_hdr {
-       u_int32_t type;
-       u_int16_t len;
-       u_int16_t flags;
-       u_int32_t peerid;
-       u_int32_t pid;
+       u_int32_t        type;
+       u_int16_t        len;
+       u_int16_t        flags;
+       u_int32_t        peerid;
+       u_int32_t        pid;
 };
 
 struct imsg {
-       struct imsg_hdr hdr;
-       int fd;
-       void *data;
+       struct imsg_hdr  hdr;
+       int              fd;
+       void            *data;
 };
 
 
 /* buffer.c */
-struct ibuf *ibuf_open(size_t);
-struct ibuf *ibuf_dynamic(size_t, size_t);
-int ibuf_add(struct ibuf *, const void *, size_t);
-void *ibuf_reserve(struct ibuf *, size_t);
-void *ibuf_seek(struct ibuf *, size_t, size_t);
-size_t ibuf_size(struct ibuf *);
-size_t ibuf_left(struct ibuf *);
-void ibuf_close(struct msgbuf *, struct ibuf *);
-int ibuf_write(struct msgbuf *);
-void ibuf_free(struct ibuf *);
-void msgbuf_init(struct msgbuf *);
-void msgbuf_clear(struct msgbuf *);
-int msgbuf_write(struct msgbuf *);
-void msgbuf_drain(struct msgbuf *, size_t);
+struct ibuf    *ibuf_open(size_t);
+struct ibuf    *ibuf_dynamic(size_t, size_t);
+int             ibuf_add(struct ibuf *, const void *, size_t);
+void           *ibuf_reserve(struct ibuf *, size_t);
+void           *ibuf_seek(struct ibuf *, size_t, size_t);
+size_t          ibuf_size(struct ibuf *);
+size_t          ibuf_left(struct ibuf *);
+void            ibuf_close(struct msgbuf *, struct ibuf *);
+int             ibuf_write(struct msgbuf *);
+void            ibuf_free(struct ibuf *);
+void            msgbuf_init(struct msgbuf *);
+void            msgbuf_clear(struct msgbuf *);
+int             msgbuf_write(struct msgbuf *);
+void            msgbuf_drain(struct msgbuf *, size_t);
 
 /* imsg.c */
-void imsg_init(struct imsgbuf *, int);
-ssize_t imsg_read(struct imsgbuf *);
-ssize_t imsg_get(struct imsgbuf *, struct imsg *);
-int imsg_compose(struct imsgbuf *, u_int32_t, u_int32_t, pid_t, int,
-                const void *, u_int16_t);
-int imsg_composev(struct imsgbuf *, u_int32_t, u_int32_t, pid_t, int,
-                 const struct iovec *, int);
+void    imsg_init(struct imsgbuf *, int);
+ssize_t         imsg_read(struct imsgbuf *);
+ssize_t         imsg_get(struct imsgbuf *, struct imsg *);
+int     imsg_compose(struct imsgbuf *, u_int32_t, u_int32_t, pid_t,
+           int, const void *, u_int16_t);
+int     imsg_composev(struct imsgbuf *, u_int32_t, u_int32_t,  pid_t,
+           int, const struct iovec *, int);
 struct ibuf *imsg_create(struct imsgbuf *, u_int32_t, u_int32_t, pid_t,
-                        u_int16_t);
-int imsg_add(struct ibuf *, const void *, u_int16_t);
-void imsg_close(struct imsgbuf *, struct ibuf *);
-void imsg_free(struct imsg *);
-int imsg_flush(struct imsgbuf *);
-void imsg_clear(struct imsgbuf *);
+           u_int16_t);
+int     imsg_add(struct ibuf *, const void *, u_int16_t);
+void    imsg_close(struct imsgbuf *, struct ibuf *);
+void    imsg_free(struct imsg *);
+int     imsg_flush(struct imsgbuf *);
+void    imsg_clear(struct imsgbuf *);
 
 #endif
index 68f172cdf9165e32429f7a9926f6994fc64574a9..28e086535412218f70dbde14dc2fed64f9cf65c5 100644 (file)
--- a/lib/log.c
+++ b/lib/log.c
@@ -411,7 +411,7 @@ void zlog_signal(int signo, const char *action
                 ,
                 siginfo_t *siginfo, void *program_counter
 #endif
-)
+                )
 {
        time_t now;
        char buf[sizeof("DEFAULT: Received signal S at T (si_addr 0xP, PC 0xP); aborting...")
@@ -474,7 +474,7 @@ void zlog_signal(int signo, const char *action
 #else
                               NULL
 #endif
-       );
+                              );
 
        s = buf;
        struct thread *tc;
@@ -1063,9 +1063,10 @@ void zlog_hexdump(const void *mem, unsigned int len)
                                                 printing */
                                        s += sprintf(s, " ");
 
-                               else if (isprint((int)((const char *)mem)
-                                                        [j])) /* printable char
-                                                               */
+                               else if (
+                                       isprint((int)((const char *)mem)
+                                                       [j])) /* printable char
+                                                                */
                                        s += sprintf(
                                                s, "%c",
                                                0xFF & ((const char *)mem)[j]);
index 711308a47676e9026ead3a441d3a992d38f446e8..d872ce56d695b77422c42ce007bc0bd7a5028de6 100644 (file)
--- a/lib/log.h
+++ b/lib/log.h
@@ -109,7 +109,7 @@ extern void zlog_signal(int signo, const char *action
                        ,
                        siginfo_t *siginfo, void *program_counter
 #endif
-);
+                       );
 
 /* Log a backtrace. */
 extern void zlog_backtrace(int priority);
@@ -143,7 +143,7 @@ struct timestamp_control {
        int precision;                  /* configuration parameter */
        int already_rendered;           /* should be initialized to 0 */
        char buf[QUAGGA_TIMESTAMP_LEN]; /* will contain the rendered timestamp
-                                        */
+                                          */
 };
 
 /* Defines for use in command construction: */
index 633256b77bd6fb89f8917e5e0d2947e45af51f36..cce67d7ec1d299e5d0a7cc9b9d904d90e36bb308 100644 (file)
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -389,11 +389,11 @@ uint8_t *digest;                     /* caller digest to be filled in */
 {
        MD5_CTX context;
        unsigned char k_ipad[65]; /* inner padding -
-                                  * key XORd with ipad
-                                  */
+                                 * key XORd with ipad
+                                 */
        unsigned char k_opad[65]; /* outer padding -
-                                  * key XORd with opad
-                                  */
+                                 * key XORd with opad
+                                 */
        unsigned char tk[16];
        int i;
        /* if key is longer than 64 bytes reset it to key=MD5(key) */
index 38482e2f926c27b65cd949c47ffc0b889363e357..025770d479645bebc23d826cd96ba15d63dbbecd 100644 (file)
@@ -173,7 +173,7 @@ static inline char *label2str(mpls_label_t label, char *buf, size_t len)
 #define MPLS_LABEL_RTALERT     1               /* Router Alert Label       */
 #define MPLS_LABEL_IPV6NULL    2               /* IPv6 Explicit NULL Label */
 #define MPLS_LABEL_IMPLNULL    3               /* Implicit NULL Label      */
-/*      MPLS_LABEL_RESERVED    4-15 */ /* Values 4-15 are reserved */
+       /*      MPLS_LABEL_RESERVED     4-15 */ /* Values 4-15 are reserved */
 #define MPLS_LABEL_RESERVED_MAX 15
 #define MPLS_LABEL_MAX         ((1 << 20) - 1)
 
index 9b0c2d73f4700967cbc0201ad9a9428dc5f1521a..7180be33dd852ab0bdccdcddefbc9e53c0fd446b 100644 (file)
@@ -133,17 +133,17 @@ void copy_nexthops(struct nexthop **tnh, struct nexthop *nh,
 
        for (nh1 = nh; nh1; nh1 = nh1->next) {
                nexthop = nexthop_new();
-               nexthop->ifindex = nh->ifindex;
-               nexthop->type = nh->type;
-               nexthop->flags = nh->flags;
-               memcpy(&nexthop->gate, &nh->gate, sizeof(nh->gate));
-               memcpy(&nexthop->src, &nh->src, sizeof(nh->src));
-               memcpy(&nexthop->rmap_src, &nh->rmap_src, sizeof(nh->rmap_src));
+               nexthop->ifindex = nh1->ifindex;
+               nexthop->type = nh1->type;
+               nexthop->flags = nh1->flags;
+               memcpy(&nexthop->gate, &nh1->gate, sizeof(nh1->gate));
+               memcpy(&nexthop->src, &nh1->src, sizeof(nh1->src));
+               memcpy(&nexthop->rmap_src, &nh1->rmap_src, sizeof(nh1->rmap_src));
                nexthop->rparent = rparent;
-               if (nh->nh_label)
-                       nexthop_add_labels(nexthop, nh->nh_label_type,
-                                          nh->nh_label->num_labels,
-                                          &nh->nh_label->label[0]);
+               if (nh1->nh_label)
+                       nexthop_add_labels(nexthop, nh1->nh_label_type,
+                                          nh1->nh_label->num_labels,
+                                          &nh1->nh_label->label[0]);
                nexthop_add(tnh, nexthop);
 
                if (CHECK_FLAG(nh1->flags, NEXTHOP_FLAG_RECURSIVE))
index 5d77ac2a4713203bdd455ad03429237bb1dfa530..d171e14d25dc0b22366f1166ae47fb7f107ff3f4 100644 (file)
 
 #include <lib/openbsd-tree.h>
 
-static inline struct rb_entry *rb_n2e(const struct rb_type *t, void *node)
+static inline struct rb_entry *
+rb_n2e(const struct rb_type *t, void *node)
 {
        unsigned long addr = (unsigned long)node;
 
        return ((struct rb_entry *)(addr + t->t_offset));
 }
 
-static inline void *rb_e2n(const struct rb_type *t, struct rb_entry *rbe)
+static inline void *
+rb_e2n(const struct rb_type *t, struct rb_entry *rbe)
 {
        unsigned long addr = (unsigned long)rbe;
 
@@ -66,33 +68,37 @@ static inline void *rb_e2n(const struct rb_type *t, struct rb_entry *rbe)
 
 #define RBH_ROOT(_rbt)         (_rbt)->rbt_root
 
-static inline void rbe_set(struct rb_entry *rbe, struct rb_entry *parent)
+static inline void
+rbe_set(struct rb_entry *rbe, struct rb_entry *parent)
 {
        RBE_PARENT(rbe) = parent;
        RBE_LEFT(rbe) = RBE_RIGHT(rbe) = NULL;
        RBE_COLOR(rbe) = RB_RED;
 }
 
-static inline void rbe_set_blackred(struct rb_entry *black,
-                                   struct rb_entry *red)
+static inline void
+rbe_set_blackred(struct rb_entry *black, struct rb_entry *red)
 {
        RBE_COLOR(black) = RB_BLACK;
        RBE_COLOR(red) = RB_RED;
 }
 
-static inline void rbe_augment(const struct rb_type *t, struct rb_entry *rbe)
+static inline void
+rbe_augment(const struct rb_type *t, struct rb_entry *rbe)
 {
        (*t->t_augment)(rb_e2n(t, rbe));
 }
 
-static inline void rbe_if_augment(const struct rb_type *t, struct rb_entry *rbe)
+static inline void
+rbe_if_augment(const struct rb_type *t, struct rb_entry *rbe)
 {
        if (t->t_augment != NULL)
                rbe_augment(t, rbe);
 }
 
-static inline void rbe_rotate_left(const struct rb_type *t,
-                                  struct rbt_tree *rbt, struct rb_entry *rbe)
+static inline void
+rbe_rotate_left(const struct rb_type *t, struct rbt_tree *rbt,
+    struct rb_entry *rbe)
 {
        struct rb_entry *parent;
        struct rb_entry *tmp;
@@ -124,8 +130,9 @@ static inline void rbe_rotate_left(const struct rb_type *t,
        }
 }
 
-static inline void rbe_rotate_right(const struct rb_type *t,
-                                   struct rbt_tree *rbt, struct rb_entry *rbe)
+static inline void
+rbe_rotate_right(const struct rb_type *t, struct rbt_tree *rbt,
+    struct rb_entry *rbe)
 {
        struct rb_entry *parent;
        struct rb_entry *tmp;
@@ -157,13 +164,14 @@ static inline void rbe_rotate_right(const struct rb_type *t,
        }
 }
 
-static inline void rbe_insert_color(const struct rb_type *t,
-                                   struct rbt_tree *rbt, struct rb_entry *rbe)
+static inline void
+rbe_insert_color(const struct rb_type *t, struct rbt_tree *rbt,
+    struct rb_entry *rbe)
 {
        struct rb_entry *parent, *gparent, *tmp;
 
-       while ((parent = RBE_PARENT(rbe)) != NULL
-              && RBE_COLOR(parent) == RB_RED) {
+       while ((parent = RBE_PARENT(rbe)) != NULL &&
+           RBE_COLOR(parent) == RB_RED) {
                gparent = RBE_PARENT(parent);
 
                if (parent == RBE_LEFT(gparent)) {
@@ -208,19 +216,14 @@ static inline void rbe_insert_color(const struct rb_type *t,
        RBE_COLOR(RBH_ROOT(rbt)) = RB_BLACK;
 }
 
-static inline void rbe_remove_color(const struct rb_type *t,
-                                   struct rbt_tree *rbt,
-                                   struct rb_entry *parent,
-                                   struct rb_entry *rbe)
+static inline void
+rbe_remove_color(const struct rb_type *t, struct rbt_tree *rbt,
+    struct rb_entry *parent, struct rb_entry *rbe)
 {
        struct rb_entry *tmp;
 
-       /* Silence clang possible NULL deference warning. */
-       if (parent == NULL)
-               return;
-
-       while ((rbe == NULL || RBE_COLOR(rbe) == RB_BLACK)
-              && rbe != RBH_ROOT(rbt)) {
+       while ((rbe == NULL || RBE_COLOR(rbe) == RB_BLACK) &&
+           rbe != RBH_ROOT(rbt) && parent) {
                if (RBE_LEFT(parent) == rbe) {
                        tmp = RBE_RIGHT(parent);
                        if (RBE_COLOR(tmp) == RB_RED) {
@@ -228,16 +231,16 @@ static inline void rbe_remove_color(const struct rb_type *t,
                                rbe_rotate_left(t, rbt, parent);
                                tmp = RBE_RIGHT(parent);
                        }
-                       if ((RBE_LEFT(tmp) == NULL
-                            || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK)
-                           && (RBE_RIGHT(tmp) == NULL
-                               || RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
+                       if ((RBE_LEFT(tmp) == NULL ||
+                            RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK) &&
+                           (RBE_RIGHT(tmp) == NULL ||
+                            RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
                                RBE_COLOR(tmp) = RB_RED;
                                rbe = parent;
                                parent = RBE_PARENT(rbe);
                        } else {
-                               if (RBE_RIGHT(tmp) == NULL
-                                   || RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK) {
+                               if (RBE_RIGHT(tmp) == NULL ||
+                                   RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK) {
                                        struct rb_entry *oleft;
 
                                        oleft = RBE_LEFT(tmp);
@@ -266,16 +269,16 @@ static inline void rbe_remove_color(const struct rb_type *t,
                                tmp = RBE_LEFT(parent);
                        }
 
-                       if ((RBE_LEFT(tmp) == NULL
-                            || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK)
-                           && (RBE_RIGHT(tmp) == NULL
-                               || RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
+                       if ((RBE_LEFT(tmp) == NULL ||
+                            RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK) &&
+                           (RBE_RIGHT(tmp) == NULL ||
+                            RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
                                RBE_COLOR(tmp) = RB_RED;
                                rbe = parent;
                                parent = RBE_PARENT(rbe);
                        } else {
-                               if (RBE_LEFT(tmp) == NULL
-                                   || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK) {
+                               if (RBE_LEFT(tmp) == NULL ||
+                                   RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK) {
                                        struct rb_entry *oright;
 
                                        oright = RBE_RIGHT(tmp);
@@ -385,7 +388,8 @@ color:
        return (old);
 }
 
-void *_rb_remove(const struct rb_type *t, struct rbt_tree *rbt, void *elm)
+void *
+_rb_remove(const struct rb_type *t, struct rbt_tree *rbt, void *elm)
 {
        struct rb_entry *rbe = rb_n2e(t, elm);
        struct rb_entry *old;
@@ -395,7 +399,8 @@ void *_rb_remove(const struct rb_type *t, struct rbt_tree *rbt, void *elm)
        return (old == NULL ? NULL : rb_e2n(t, old));
 }
 
-void *_rb_insert(const struct rb_type *t, struct rbt_tree *rbt, void *elm)
+void *
+_rb_insert(const struct rb_type *t, struct rbt_tree *rbt, void *elm)
 {
        struct rb_entry *rbe = rb_n2e(t, elm);
        struct rb_entry *tmp;
@@ -435,7 +440,8 @@ void *_rb_insert(const struct rb_type *t, struct rbt_tree *rbt, void *elm)
 }
 
 /* Finds the node with the same key as elm */
-void *_rb_find(const struct rb_type *t, struct rbt_tree *rbt, const void *key)
+void *
+_rb_find(const struct rb_type *t, struct rbt_tree *rbt, const void *key)
 {
        struct rb_entry *tmp = RBH_ROOT(rbt);
        void *node;
@@ -456,7 +462,8 @@ void *_rb_find(const struct rb_type *t, struct rbt_tree *rbt, const void *key)
 }
 
 /* Finds the first node greater than or equal to the search key */
-void *_rb_nfind(const struct rb_type *t, struct rbt_tree *rbt, const void *key)
+void *
+_rb_nfind(const struct rb_type *t, struct rbt_tree *rbt, const void *key)
 {
        struct rb_entry *tmp = RBH_ROOT(rbt);
        void *node;
@@ -478,7 +485,8 @@ void *_rb_nfind(const struct rb_type *t, struct rbt_tree *rbt, const void *key)
        return (res);
 }
 
-void *_rb_next(const struct rb_type *t, void *elm)
+void *
+_rb_next(const struct rb_type *t, void *elm)
 {
        struct rb_entry *rbe = rb_n2e(t, elm);
 
@@ -487,11 +495,12 @@ void *_rb_next(const struct rb_type *t, void *elm)
                while (RBE_LEFT(rbe) != NULL)
                        rbe = RBE_LEFT(rbe);
        } else {
-               if (RBE_PARENT(rbe) && (rbe == RBE_LEFT(RBE_PARENT(rbe))))
+               if (RBE_PARENT(rbe) &&
+                   (rbe == RBE_LEFT(RBE_PARENT(rbe))))
                        rbe = RBE_PARENT(rbe);
                else {
-                       while (RBE_PARENT(rbe)
-                              && (rbe == RBE_RIGHT(RBE_PARENT(rbe))))
+                       while (RBE_PARENT(rbe) &&
+                           (rbe == RBE_RIGHT(RBE_PARENT(rbe))))
                                rbe = RBE_PARENT(rbe);
                        rbe = RBE_PARENT(rbe);
                }
@@ -500,7 +509,8 @@ void *_rb_next(const struct rb_type *t, void *elm)
        return (rbe == NULL ? NULL : rb_e2n(t, rbe));
 }
 
-void *_rb_prev(const struct rb_type *t, void *elm)
+void *
+_rb_prev(const struct rb_type *t, void *elm)
 {
        struct rb_entry *rbe = rb_n2e(t, elm);
 
@@ -509,11 +519,12 @@ void *_rb_prev(const struct rb_type *t, void *elm)
                while (RBE_RIGHT(rbe))
                        rbe = RBE_RIGHT(rbe);
        } else {
-               if (RBE_PARENT(rbe) && (rbe == RBE_RIGHT(RBE_PARENT(rbe))))
+               if (RBE_PARENT(rbe) &&
+                   (rbe == RBE_RIGHT(RBE_PARENT(rbe))))
                        rbe = RBE_PARENT(rbe);
                else {
-                       while (RBE_PARENT(rbe)
-                              && (rbe == RBE_LEFT(RBE_PARENT(rbe))))
+                       while (RBE_PARENT(rbe) &&
+                           (rbe == RBE_LEFT(RBE_PARENT(rbe))))
                                rbe = RBE_PARENT(rbe);
                        rbe = RBE_PARENT(rbe);
                }
@@ -522,14 +533,16 @@ void *_rb_prev(const struct rb_type *t, void *elm)
        return (rbe == NULL ? NULL : rb_e2n(t, rbe));
 }
 
-void *_rb_root(const struct rb_type *t, struct rbt_tree *rbt)
+void *
+_rb_root(const struct rb_type *t, struct rbt_tree *rbt)
 {
        struct rb_entry *rbe = RBH_ROOT(rbt);
 
        return (rbe == NULL ? rbe : rb_e2n(t, rbe));
 }
 
-void *_rb_min(const struct rb_type *t, struct rbt_tree *rbt)
+void *
+_rb_min(const struct rb_type *t, struct rbt_tree *rbt)
 {
        struct rb_entry *rbe = RBH_ROOT(rbt);
        struct rb_entry *parent = NULL;
@@ -542,7 +555,8 @@ void *_rb_min(const struct rb_type *t, struct rbt_tree *rbt)
        return (parent == NULL ? NULL : rb_e2n(t, parent));
 }
 
-void *_rb_max(const struct rb_type *t, struct rbt_tree *rbt)
+void *
+_rb_max(const struct rb_type *t, struct rbt_tree *rbt)
 {
        struct rb_entry *rbe = RBH_ROOT(rbt);
        struct rb_entry *parent = NULL;
@@ -555,28 +569,32 @@ void *_rb_max(const struct rb_type *t, struct rbt_tree *rbt)
        return (parent == NULL ? NULL : rb_e2n(t, parent));
 }
 
-void *_rb_left(const struct rb_type *t, void *node)
+void *
+_rb_left(const struct rb_type *t, void *node)
 {
        struct rb_entry *rbe = rb_n2e(t, node);
        rbe = RBE_LEFT(rbe);
        return (rbe == NULL ? NULL : rb_e2n(t, rbe));
 }
 
-void *_rb_right(const struct rb_type *t, void *node)
+void *
+_rb_right(const struct rb_type *t, void *node)
 {
        struct rb_entry *rbe = rb_n2e(t, node);
        rbe = RBE_RIGHT(rbe);
        return (rbe == NULL ? NULL : rb_e2n(t, rbe));
 }
 
-void *_rb_parent(const struct rb_type *t, void *node)
+void *
+_rb_parent(const struct rb_type *t, void *node)
 {
        struct rb_entry *rbe = rb_n2e(t, node);
        rbe = RBE_PARENT(rbe);
        return (rbe == NULL ? NULL : rb_e2n(t, rbe));
 }
 
-void _rb_set_left(const struct rb_type *t, void *node, void *left)
+void
+_rb_set_left(const struct rb_type *t, void *node, void *left)
 {
        struct rb_entry *rbe = rb_n2e(t, node);
        struct rb_entry *rbl = (left == NULL) ? NULL : rb_n2e(t, left);
@@ -584,7 +602,8 @@ void _rb_set_left(const struct rb_type *t, void *node, void *left)
        RBE_LEFT(rbe) = rbl;
 }
 
-void _rb_set_right(const struct rb_type *t, void *node, void *right)
+void
+_rb_set_right(const struct rb_type *t, void *node, void *right)
 {
        struct rb_entry *rbe = rb_n2e(t, node);
        struct rb_entry *rbr = (right == NULL) ? NULL : rb_n2e(t, right);
@@ -592,7 +611,8 @@ void _rb_set_right(const struct rb_type *t, void *node, void *right)
        RBE_RIGHT(rbe) = rbr;
 }
 
-void _rb_set_parent(const struct rb_type *t, void *node, void *parent)
+void
+_rb_set_parent(const struct rb_type *t, void *node, void *parent)
 {
        struct rb_entry *rbe = rb_n2e(t, node);
        struct rb_entry *rbp = (parent == NULL) ? NULL : rb_n2e(t, parent);
@@ -600,19 +620,21 @@ void _rb_set_parent(const struct rb_type *t, void *node, void *parent)
        RBE_PARENT(rbe) = rbp;
 }
 
-void _rb_poison(const struct rb_type *t, void *node, unsigned long poison)
+void
+_rb_poison(const struct rb_type *t, void *node, unsigned long poison)
 {
        struct rb_entry *rbe = rb_n2e(t, node);
 
        RBE_PARENT(rbe) = RBE_LEFT(rbe) = RBE_RIGHT(rbe) =
-               (struct rb_entry *)poison;
+           (struct rb_entry *)poison;
 }
 
-int _rb_check(const struct rb_type *t, void *node, unsigned long poison)
+int
+_rb_check(const struct rb_type *t, void *node, unsigned long poison)
 {
        struct rb_entry *rbe = rb_n2e(t, node);
 
-       return ((unsigned long)RBE_PARENT(rbe) == poison
-               && (unsigned long)RBE_LEFT(rbe) == poison
-               && (unsigned long)RBE_RIGHT(rbe) == poison);
+       return ((unsigned long)RBE_PARENT(rbe) == poison &&
+           (unsigned long)RBE_LEFT(rbe) == poison &&
+           (unsigned long)RBE_RIGHT(rbe) == poison);
 }
index bfa695fcdc8a84bcc0f53ffac02bd0ebfd96ca6b..22cb9252f55705e4734650f85ccc7b675d7da010 100644 (file)
@@ -24,7 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef _SYS_TREE_H_
+#ifndef        _SYS_TREE_H_
 #define        _SYS_TREE_H_
 
 /*
  * The maximum height of a red-black tree is 2lg (n+1).
  */
 
-#define SPLAY_HEAD(name, type)                                                 \
-       struct name {                                                          \
-               struct type *sph_root; /* root of the tree */                  \
-       }
+#define SPLAY_HEAD(name, type)                                         \
+struct name {                                                          \
+       struct type *sph_root; /* root of the tree */                   \
+}
 
-#define SPLAY_INITIALIZER(root)                                                \
-       {                                                                      \
-               NULL                                                           \
-       }
+#define SPLAY_INITIALIZER(root)                                                \
+       { NULL }
 
-#define SPLAY_INIT(root)                                                       \
-       do {                                                                   \
-               (root)->sph_root = NULL;                                       \
-       } while (0)
+#define SPLAY_INIT(root) do {                                          \
+       (root)->sph_root = NULL;                                        \
+} while (0)
 
-#define SPLAY_ENTRY(type)                                                      \
-       struct {                                                               \
-               struct type *spe_left;  /* left element */                     \
-               struct type *spe_right; /* right element */                    \
-       }
+#define SPLAY_ENTRY(type)                                              \
+struct {                                                               \
+       struct type *spe_left; /* left element */                       \
+       struct type *spe_right; /* right element */                     \
+}
 
 #define SPLAY_LEFT(elm, field)         (elm)->field.spe_left
 #define SPLAY_RIGHT(elm, field)                (elm)->field.spe_right
 #define SPLAY_EMPTY(head)              (SPLAY_ROOT(head) == NULL)
 
 /* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */
-#define SPLAY_ROTATE_RIGHT(head, tmp, field)                                   \
-       do {                                                                   \
-               SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \
-               SPLAY_RIGHT(tmp, field) = (head)->sph_root;                    \
-               (head)->sph_root = tmp;                                        \
-       } while (0)
-
-#define SPLAY_ROTATE_LEFT(head, tmp, field)                                    \
-       do {                                                                   \
-               SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \
-               SPLAY_LEFT(tmp, field) = (head)->sph_root;                     \
-               (head)->sph_root = tmp;                                        \
-       } while (0)
-
-#define SPLAY_LINKLEFT(head, tmp, field)                                       \
-       do {                                                                   \
-               SPLAY_LEFT(tmp, field) = (head)->sph_root;                     \
-               tmp = (head)->sph_root;                                        \
-               (head)->sph_root = SPLAY_LEFT((head)->sph_root, field);        \
-       } while (0)
-
-#define SPLAY_LINKRIGHT(head, tmp, field)                                      \
-       do {                                                                   \
-               SPLAY_RIGHT(tmp, field) = (head)->sph_root;                    \
-               tmp = (head)->sph_root;                                        \
-               (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field);       \
-       } while (0)
-
-#define SPLAY_ASSEMBLE(head, node, left, right, field)                         \
-       do {                                                                   \
-               SPLAY_RIGHT(left, field) =                                     \
-                       SPLAY_LEFT((head)->sph_root, field);                   \
-               SPLAY_LEFT(right, field) =                                     \
-                       SPLAY_RIGHT((head)->sph_root, field);                  \
-               SPLAY_LEFT((head)->sph_root, field) =                          \
-                       SPLAY_RIGHT(node, field);                              \
-               SPLAY_RIGHT((head)->sph_root, field) =                         \
-                       SPLAY_LEFT(node, field);                               \
-       } while (0)
+#define SPLAY_ROTATE_RIGHT(head, tmp, field) do {                      \
+       SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field);  \
+       SPLAY_RIGHT(tmp, field) = (head)->sph_root;                     \
+       (head)->sph_root = tmp;                                         \
+} while (0)
+
+#define SPLAY_ROTATE_LEFT(head, tmp, field) do {                       \
+       SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field);  \
+       SPLAY_LEFT(tmp, field) = (head)->sph_root;                      \
+       (head)->sph_root = tmp;                                         \
+} while (0)
+
+#define SPLAY_LINKLEFT(head, tmp, field) do {                          \
+       SPLAY_LEFT(tmp, field) = (head)->sph_root;                      \
+       tmp = (head)->sph_root;                                         \
+       (head)->sph_root = SPLAY_LEFT((head)->sph_root, field);         \
+} while (0)
+
+#define SPLAY_LINKRIGHT(head, tmp, field) do {                         \
+       SPLAY_RIGHT(tmp, field) = (head)->sph_root;                     \
+       tmp = (head)->sph_root;                                         \
+       (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field);        \
+} while (0)
+
+#define SPLAY_ASSEMBLE(head, node, left, right, field) do {            \
+       SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \
+       SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field);\
+       SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \
+       SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \
+} while (0)
 
 /* Generates prototypes and inline functions */
 
-#define SPLAY_PROTOTYPE(name, type, field, cmp)                                \
-       void name##_SPLAY(struct name *, struct type *);                       \
-       void name##_SPLAY_MINMAX(struct name *, int);                          \
-       struct type *name##_SPLAY_INSERT(struct name *, struct type *);        \
-       struct type *name##_SPLAY_REMOVE(struct name *, struct type *);        \
-                                                                               \
-       /* Finds the node with the same key as elm */                          \
-       static __inline struct type *name##_SPLAY_FIND(struct name *head,      \
-                                                      struct type *elm)       \
-       {                                                                      \
-               if (SPLAY_EMPTY(head))                                         \
-                       return (NULL);                                         \
-               name##_SPLAY(head, elm);                                       \
-               if ((cmp)(elm, (head)->sph_root) == 0)                         \
-                       return (head->sph_root);                               \
-               return (NULL);                                                 \
-       }                                                                      \
-                                                                               \
-       static __inline struct type *name##_SPLAY_NEXT(struct name *head,      \
-                                                      struct type *elm)       \
-       {                                                                      \
-               name##_SPLAY(head, elm);                                       \
-               if (SPLAY_RIGHT(elm, field) != NULL) {                         \
-                       elm = SPLAY_RIGHT(elm, field);                         \
-                       while (SPLAY_LEFT(elm, field) != NULL) {               \
-                               elm = SPLAY_LEFT(elm, field);                  \
-                       }                                                      \
-               } else                                                         \
-                       elm = NULL;                                            \
-               return (elm);                                                  \
-       }                                                                      \
-                                                                               \
-       static __inline struct type *name##_SPLAY_MIN_MAX(struct name *head,   \
-                                                         int val)             \
-       {                                                                      \
-               name##_SPLAY_MINMAX(head, val);                                \
-               return (SPLAY_ROOT(head));                                     \
-       }
+#define SPLAY_PROTOTYPE(name, type, field, cmp)                                \
+void name##_SPLAY(struct name *, struct type *);                       \
+void name##_SPLAY_MINMAX(struct name *, int);                          \
+struct type *name##_SPLAY_INSERT(struct name *, struct type *);                \
+struct type *name##_SPLAY_REMOVE(struct name *, struct type *);                \
+                                                                       \
+/* Finds the node with the same key as elm */                          \
+static __inline struct type *                                          \
+name##_SPLAY_FIND(struct name *head, struct type *elm)                 \
+{                                                                      \
+       if (SPLAY_EMPTY(head))                                          \
+               return(NULL);                                           \
+       name##_SPLAY(head, elm);                                        \
+       if ((cmp)(elm, (head)->sph_root) == 0)                          \
+               return (head->sph_root);                                \
+       return (NULL);                                                  \
+}                                                                      \
+                                                                       \
+static __inline struct type *                                          \
+name##_SPLAY_NEXT(struct name *head, struct type *elm)                 \
+{                                                                      \
+       name##_SPLAY(head, elm);                                        \
+       if (SPLAY_RIGHT(elm, field) != NULL) {                          \
+               elm = SPLAY_RIGHT(elm, field);                          \
+               while (SPLAY_LEFT(elm, field) != NULL) {                \
+                       elm = SPLAY_LEFT(elm, field);                   \
+                                                                     \
+       } else                                                          \
+               elm = NULL;                                             \
+       return (elm);                                                   \
+}                                                                      \
+                                                                       \
+static __inline struct type *                                          \
+name##_SPLAY_MIN_MAX(struct name *head, int val)                       \
+{                                                                      \
+       name##_SPLAY_MINMAX(head, val);                                 \
+        return (SPLAY_ROOT(head));                                     \
+}
 
 /* Main splay operation.
  * Moves node close to the key of elm to top
  */
-#define SPLAY_GENERATE(name, type, field, cmp)                                 \
-       struct type *name##_SPLAY_INSERT(struct name *head, struct type *elm)  \
-       {                                                                      \
-               if (SPLAY_EMPTY(head)) {                                       \
-                       SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) =     \
-                               NULL;                                          \
-               } else {                                                       \
-                       int __comp;                                            \
-                       name##_SPLAY(head, elm);                               \
-                       __comp = (cmp)(elm, (head)->sph_root);                 \
-                       if (__comp < 0) {                                      \
-                               SPLAY_LEFT(elm, field) =                       \
-                                       SPLAY_LEFT((head)->sph_root, field);   \
-                               SPLAY_RIGHT(elm, field) = (head)->sph_root;    \
-                               SPLAY_LEFT((head)->sph_root, field) = NULL;    \
-                       } else if (__comp > 0) {                               \
-                               SPLAY_RIGHT(elm, field) =                      \
-                                       SPLAY_RIGHT((head)->sph_root, field);  \
-                               SPLAY_LEFT(elm, field) = (head)->sph_root;     \
-                               SPLAY_RIGHT((head)->sph_root, field) = NULL;   \
-                       } else                                                 \
-                               return ((head)->sph_root);                     \
-               }                                                              \
-               (head)->sph_root = (elm);                                      \
-               return (NULL);                                                 \
-       }                                                                      \
-                                                                               \
-       struct type *name##_SPLAY_REMOVE(struct name *head, struct type *elm)  \
-       {                                                                      \
-               struct type *__tmp;                                            \
-               if (SPLAY_EMPTY(head))                                         \
-                       return (NULL);                                         \
-               name##_SPLAY(head, elm);                                       \
-               if ((cmp)(elm, (head)->sph_root) == 0) {                       \
-                       if (SPLAY_LEFT((head)->sph_root, field) == NULL) {     \
-                               (head)->sph_root =                             \
-                                       SPLAY_RIGHT((head)->sph_root, field);  \
-                       } else {                                               \
-                               __tmp = SPLAY_RIGHT((head)->sph_root, field);  \
-                               (head)->sph_root =                             \
-                                       SPLAY_LEFT((head)->sph_root, field);   \
-                               name##_SPLAY(head, elm);                       \
-                               SPLAY_RIGHT((head)->sph_root, field) = __tmp;  \
-                       }                                                      \
-                       return (elm);                                          \
-               }                                                              \
-               return (NULL);                                                 \
-       }                                                                      \
-                                                                               \
-       void name##_SPLAY(struct name *head, struct type *elm)                 \
-       {                                                                      \
-               struct type __node, *__left, *__right, *__tmp;                 \
-               int __comp;                                                    \
-                                                                               \
-               SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) =     \
-                       NULL;                                                  \
-               __left = __right = &__node;                                    \
-                                                                               \
-               while ((__comp = (cmp)(elm, (head)->sph_root))) {              \
-                       if (__comp < 0) {                                      \
-                               __tmp = SPLAY_LEFT((head)->sph_root, field);   \
-                               if (__tmp == NULL)                             \
-                                       break;                                 \
-                               if ((cmp)(elm, __tmp) < 0) {                   \
-                                       SPLAY_ROTATE_RIGHT(head, __tmp,        \
-                                                          field);             \
-                                       if (SPLAY_LEFT((head)->sph_root,       \
-                                                      field)                  \
-                                           == NULL)                           \
-                                               break;                         \
-                               }                                              \
-                               SPLAY_LINKLEFT(head, __right, field);          \
-                       } else if (__comp > 0) {                               \
-                               __tmp = SPLAY_RIGHT((head)->sph_root, field);  \
-                               if (__tmp == NULL)                             \
-                                       break;                                 \
-                               if ((cmp)(elm, __tmp) > 0) {                   \
-                                       SPLAY_ROTATE_LEFT(head, __tmp, field); \
-                                       if (SPLAY_RIGHT((head)->sph_root,      \
-                                                       field)                 \
-                                           == NULL)                           \
-                                               break;                         \
-                               }                                              \
-                               SPLAY_LINKRIGHT(head, __left, field);          \
-                       }                                                      \
-               }                                                              \
-               SPLAY_ASSEMBLE(head, &__node, __left, __right, field);         \
-       }                                                                      \
-                                                                               \
-       /* Splay with either the minimum or the maximum element                \
-        * Used to find minimum or maximum element in tree.                    \
-        */                                                                    \
-       void name##_SPLAY_MINMAX(struct name *head, int __comp)                \
-       {                                                                      \
-               struct type __node, *__left, *__right, *__tmp;                 \
-                                                                               \
-               SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) =     \
-                       NULL;                                                  \
-               __left = __right = &__node;                                    \
-                                                                               \
-               while (1) {                                                    \
-                       if (__comp < 0) {                                      \
-                               __tmp = SPLAY_LEFT((head)->sph_root, field);   \
-                               if (__tmp == NULL)                             \
-                                       break;                                 \
-                               if (__comp < 0) {                              \
-                                       SPLAY_ROTATE_RIGHT(head, __tmp,        \
-                                                          field);             \
-                                       if (SPLAY_LEFT((head)->sph_root,       \
-                                                      field)                  \
-                                           == NULL)                           \
-                                               break;                         \
-                               }                                              \
-                               SPLAY_LINKLEFT(head, __right, field);          \
-                       } else if (__comp > 0) {                               \
-                               __tmp = SPLAY_RIGHT((head)->sph_root, field);  \
-                               if (__tmp == NULL)                             \
-                                       break;                                 \
-                               if (__comp > 0) {                              \
-                                       SPLAY_ROTATE_LEFT(head, __tmp, field); \
-                                       if (SPLAY_RIGHT((head)->sph_root,      \
-                                                       field)                 \
-                                           == NULL)                           \
-                                               break;                         \
-                               }                                              \
-                               SPLAY_LINKRIGHT(head, __left, field);          \
-                       }                                                      \
-               }                                                              \
-               SPLAY_ASSEMBLE(head, &__node, __left, __right, field);         \
-       }
+#define SPLAY_GENERATE(name, type, field, cmp)                         \
+struct type *                                                          \
+name##_SPLAY_INSERT(struct name *head, struct type *elm)               \
+{                                                                      \
+    if (SPLAY_EMPTY(head)) {                                           \
+           SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL;    \
+    } else {                                                           \
+           int __comp;                                                 \
+           name##_SPLAY(head, elm);                                    \
+           __comp = (cmp)(elm, (head)->sph_root);                      \
+           if(__comp < 0) {                                            \
+                   SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field);\
+                   SPLAY_RIGHT(elm, field) = (head)->sph_root;         \
+                   SPLAY_LEFT((head)->sph_root, field) = NULL;         \
+           } else if (__comp > 0) {                                    \
+                   SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field);\
+                   SPLAY_LEFT(elm, field) = (head)->sph_root;          \
+                   SPLAY_RIGHT((head)->sph_root, field) = NULL;        \
+           } else                                                      \
+                   return ((head)->sph_root);                          \
+    }                                                                  \
+    (head)->sph_root = (elm);                                          \
+    return (NULL);                                                     \
+}                                                                      \
+                                                                       \
+struct type *                                                          \
+name##_SPLAY_REMOVE(struct name *head, struct type *elm)               \
+{                                                                      \
+       struct type *__tmp;                                             \
+       if (SPLAY_EMPTY(head))                                          \
+               return (NULL);                                          \
+       name##_SPLAY(head, elm);                                        \
+       if ((cmp)(elm, (head)->sph_root) == 0) {                        \
+               if (SPLAY_LEFT((head)->sph_root, field) == NULL) {      \
+                       (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field);\
+               } else {                                                \
+                       __tmp = SPLAY_RIGHT((head)->sph_root, field);   \
+                       (head)->sph_root = SPLAY_LEFT((head)->sph_root, field);\
+                       name##_SPLAY(head, elm);                        \
+                       SPLAY_RIGHT((head)->sph_root, field) = __tmp;   \
+               }                                                       \
+               return (elm);                                           \
+       }                                                               \
+       return (NULL);                                                  \
+}                                                                      \
+                                                                       \
+void                                                                   \
+name##_SPLAY(struct name *head, struct type *elm)                      \
+{                                                                      \
+       struct type __node, *__left, *__right, *__tmp;                  \
+       int __comp;                                                     \
+\
+       SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
+       __left = __right = &__node;                                     \
+\
+       while ((__comp = (cmp)(elm, (head)->sph_root))) {               \
+               if (__comp < 0) {                                       \
+                       __tmp = SPLAY_LEFT((head)->sph_root, field);    \
+                       if (__tmp == NULL)                              \
+                               break;                                  \
+                       if ((cmp)(elm, __tmp) < 0){                     \
+                               SPLAY_ROTATE_RIGHT(head, __tmp, field); \
+                               if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
+                                       break;                          \
+                       }                                               \
+                       SPLAY_LINKLEFT(head, __right, field);           \
+               } else if (__comp > 0) {                                \
+                       __tmp = SPLAY_RIGHT((head)->sph_root, field);   \
+                       if (__tmp == NULL)                              \
+                               break;                                  \
+                       if ((cmp)(elm, __tmp) > 0){                     \
+                               SPLAY_ROTATE_LEFT(head, __tmp, field);  \
+                               if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
+                                       break;                          \
+                       }                                               \
+                       SPLAY_LINKRIGHT(head, __left, field);           \
+               }                                                       \
+       }                                                               \
+       SPLAY_ASSEMBLE(head, &__node, __left, __right, field);          \
+}                                                                      \
+                                                                       \
+/* Splay with either the minimum or the maximum element                        \
+ * Used to find minimum or maximum element in tree.                    \
+ */                                                                    \
+void name##_SPLAY_MINMAX(struct name *head, int __comp) \
+{                                                                      \
+       struct type __node, *__left, *__right, *__tmp;                  \
+\
+       SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
+       __left = __right = &__node;                                     \
+\
+       while (1) {                                                     \
+               if (__comp < 0) {                                       \
+                       __tmp = SPLAY_LEFT((head)->sph_root, field);    \
+                       if (__tmp == NULL)                              \
+                               break;                                  \
+                       if (__comp < 0){                                \
+                               SPLAY_ROTATE_RIGHT(head, __tmp, field); \
+                               if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
+                                       break;                          \
+                       }                                               \
+                       SPLAY_LINKLEFT(head, __right, field);           \
+               } else if (__comp > 0) {                                \
+                       __tmp = SPLAY_RIGHT((head)->sph_root, field);   \
+                       if (__tmp == NULL)                              \
+                               break;                                  \
+                       if (__comp > 0) {                               \
+                               SPLAY_ROTATE_LEFT(head, __tmp, field);  \
+                               if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
+                                       break;                          \
+                       }                                               \
+                       SPLAY_LINKRIGHT(head, __left, field);           \
+               }                                                       \
+       }                                                               \
+       SPLAY_ASSEMBLE(head, &__node, __left, __right, field);          \
+}
 
 #define SPLAY_NEGINF   -1
 #define SPLAY_INF      1
 #define SPLAY_REMOVE(name, x, y)       name##_SPLAY_REMOVE(x, y)
 #define SPLAY_FIND(name, x, y)         name##_SPLAY_FIND(x, y)
 #define SPLAY_NEXT(name, x, y)         name##_SPLAY_NEXT(x, y)
-#define SPLAY_MIN(name, x)                                                     \
-       (SPLAY_EMPTY(x) ? NULL : name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF))
-#define SPLAY_MAX(name, x)                                                     \
-       (SPLAY_EMPTY(x) ? NULL : name##_SPLAY_MIN_MAX(x, SPLAY_INF))
-
-#define SPLAY_FOREACH(x, name, head)                                           \
-       for ((x) = SPLAY_MIN(name, head); (x) != NULL;                         \
+#define SPLAY_MIN(name, x)             (SPLAY_EMPTY(x) ? NULL  \
+                                       : name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF))
+#define SPLAY_MAX(name, x)             (SPLAY_EMPTY(x) ? NULL  \
+                                       : name##_SPLAY_MIN_MAX(x, SPLAY_INF))
+
+#define SPLAY_FOREACH(x, name, head)                                   \
+       for ((x) = SPLAY_MIN(name, head);                               \
+            (x) != NULL;                                               \
             (x) = SPLAY_NEXT(name, head, x))
 
 /*
 #define RB_RED         1
 
 struct rb_type {
-       int (*t_compare)(const void *, const void *);
-       void (*t_augment)(void *);
-       unsigned int t_offset; /* offset of rb_entry in type */
+       int             (*t_compare)(const void *, const void *);
+       void            (*t_augment)(void *);
+       unsigned int      t_offset;     /* offset of rb_entry in type */
 };
 
 struct rbt_tree {
-       struct rb_entry *rbt_root;
+       struct rb_entry *rbt_root;
 };
 
 struct rb_entry {
-       struct rb_entry *rbt_parent;
-       struct rb_entry *rbt_left;
-       struct rb_entry *rbt_right;
-       unsigned int rbt_color;
+       struct rb_entry  *rbt_parent;
+       struct rb_entry  *rbt_left;
+       struct rb_entry  *rbt_right;
+       unsigned int      rbt_color;
 };
 
-#define RB_HEAD(_name, _type)                                                  \
-       struct _name {                                                         \
-               struct rbt_tree rbh_root;                                      \
-       }
+#define RB_HEAD(_name, _type)                                          \
+struct _name {                                                         \
+       struct rbt_tree rbh_root;                                       \
+}
 
 #define RB_ENTRY(_type)        struct rb_entry
 
-static inline void _rb_init(struct rbt_tree *rbt)
+static inline void
+_rb_init(struct rbt_tree *rbt)
 {
        rbt->rbt_root = NULL;
 }
 
-static inline int _rb_empty(struct rbt_tree *rbt)
+static inline int
+_rb_empty(struct rbt_tree *rbt)
 {
        return (rbt->rbt_root == NULL);
 }
 
-void *_rb_insert(const struct rb_type *, struct rbt_tree *, void *);
-void *_rb_remove(const struct rb_type *, struct rbt_tree *, void *);
-void *_rb_find(const struct rb_type *, struct rbt_tree *, const void *);
-void *_rb_nfind(const struct rb_type *, struct rbt_tree *, const void *);
-void *_rb_root(const struct rb_type *, struct rbt_tree *);
-void *_rb_min(const struct rb_type *, struct rbt_tree *);
-void *_rb_max(const struct rb_type *, struct rbt_tree *);
-void *_rb_next(const struct rb_type *, void *);
-void *_rb_prev(const struct rb_type *, void *);
-void *_rb_left(const struct rb_type *, void *);
-void *_rb_right(const struct rb_type *, void *);
-void *_rb_parent(const struct rb_type *, void *);
-void _rb_set_left(const struct rb_type *, void *, void *);
-void _rb_set_right(const struct rb_type *, void *, void *);
-void _rb_set_parent(const struct rb_type *, void *, void *);
-void _rb_poison(const struct rb_type *, void *, unsigned long);
-int _rb_check(const struct rb_type *, void *, unsigned long);
+void   *_rb_insert(const struct rb_type *, struct rbt_tree *, void *);
+void   *_rb_remove(const struct rb_type *, struct rbt_tree *, void *);
+void   *_rb_find(const struct rb_type *, struct rbt_tree *, const void *);
+void   *_rb_nfind(const struct rb_type *, struct rbt_tree *, const void *);
+void   *_rb_root(const struct rb_type *, struct rbt_tree *);
+void   *_rb_min(const struct rb_type *, struct rbt_tree *);
+void   *_rb_max(const struct rb_type *, struct rbt_tree *);
+void   *_rb_next(const struct rb_type *, void *);
+void   *_rb_prev(const struct rb_type *, void *);
+void   *_rb_left(const struct rb_type *, void *);
+void   *_rb_right(const struct rb_type *, void *);
+void   *_rb_parent(const struct rb_type *, void *);
+void    _rb_set_left(const struct rb_type *, void *, void *);
+void    _rb_set_right(const struct rb_type *, void *, void *);
+void    _rb_set_parent(const struct rb_type *, void *, void *);
+void    _rb_poison(const struct rb_type *, void *, unsigned long);
+int     _rb_check(const struct rb_type *, void *, unsigned long);
 
 #define RB_INITIALIZER(_head)  { { NULL } }
 
-#define RB_PROTOTYPE(_name, _type, _field, _cmp)                               \
-       extern const struct rb_type *const _name##_RB_TYPE;                    \
-                                                                               \
-       __attribute__((__unused__)) static inline void _name##_RB_INIT(        \
-               struct _name *head)                                            \
-       {                                                                      \
-               _rb_init(&head->rbh_root);                                     \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_INSERT(struct _name *head, struct _type *elm)      \
-       {                                                                      \
-               return _rb_insert(_name##_RB_TYPE, &head->rbh_root, elm);      \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_REMOVE(struct _name *head, struct _type *elm)      \
-       {                                                                      \
-               return _rb_remove(_name##_RB_TYPE, &head->rbh_root, elm);      \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_FIND(struct _name *head, const struct _type *key)  \
-       {                                                                      \
-               return _rb_find(_name##_RB_TYPE, &head->rbh_root, key);        \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_NFIND(struct _name *head, const struct _type *key) \
-       {                                                                      \
-               return _rb_nfind(_name##_RB_TYPE, &head->rbh_root, key);       \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_ROOT(struct _name *head)                           \
-       {                                                                      \
-               return _rb_root(_name##_RB_TYPE, &head->rbh_root);             \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline int _name##_RB_EMPTY(        \
-               struct _name *head)                                            \
-       {                                                                      \
-               return _rb_empty(&head->rbh_root);                             \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_MIN(struct _name *head)                            \
-       {                                                                      \
-               return _rb_min(_name##_RB_TYPE, &head->rbh_root);              \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_MAX(struct _name *head)                            \
-       {                                                                      \
-               return _rb_max(_name##_RB_TYPE, &head->rbh_root);              \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_NEXT(struct _type *elm)                            \
-       {                                                                      \
-               return _rb_next(_name##_RB_TYPE, elm);                         \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_PREV(struct _type *elm)                            \
-       {                                                                      \
-               return _rb_prev(_name##_RB_TYPE, elm);                         \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_LEFT(struct _type *elm)                            \
-       {                                                                      \
-               return _rb_left(_name##_RB_TYPE, elm);                         \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_RIGHT(struct _type *elm)                           \
-       {                                                                      \
-               return _rb_right(_name##_RB_TYPE, elm);                        \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline struct _type                 \
-               *_name##_RB_PARENT(struct _type *elm)                          \
-       {                                                                      \
-               return _rb_parent(_name##_RB_TYPE, elm);                       \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline void _name##_RB_SET_LEFT(    \
-               struct _type *elm, struct _type *left)                         \
-       {                                                                      \
-               return _rb_set_left(_name##_RB_TYPE, elm, left);               \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline void _name##_RB_SET_RIGHT(   \
-               struct _type *elm, struct _type *right)                        \
-       {                                                                      \
-               return _rb_set_right(_name##_RB_TYPE, elm, right);             \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline void _name##_RB_SET_PARENT(  \
-               struct _type *elm, struct _type *parent)                       \
-       {                                                                      \
-               return _rb_set_parent(_name##_RB_TYPE, elm, parent);           \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline void _name##_RB_POISON(      \
-               struct _type *elm, unsigned long poison)                       \
-       {                                                                      \
-               return _rb_poison(_name##_RB_TYPE, elm, poison);               \
-       }                                                                      \
-                                                                               \
-       __attribute__((__unused__)) static inline int _name##_RB_CHECK(        \
-               struct _type *elm, unsigned long poison)                       \
-       {                                                                      \
-               return _rb_check(_name##_RB_TYPE, elm, poison);                \
-       }
-
-#define RB_GENERATE_INTERNAL(_name, _type, _field, _cmp, _aug)                 \
-       static int _name##_RB_COMPARE(const void *lptr, const void *rptr)      \
-       {                                                                      \
-               const struct _type *l = lptr, *r = rptr;                       \
-               return _cmp(l, r);                                             \
-       }                                                                      \
-       static const struct rb_type _name##_RB_INFO = {                        \
-               _name##_RB_COMPARE,                                            \
-               _aug,                                                          \
-               offsetof(struct _type, _field),                                \
-       };                                                                     \
-       const struct rb_type *const _name##_RB_TYPE = &_name##_RB_INFO;
-
-#define RB_GENERATE_AUGMENT(_name, _type, _field, _cmp, _aug)                  \
-       static void _name##_RB_AUGMENT(void *ptr)                              \
-       {                                                                      \
-               struct _type *p = ptr;                                         \
-               return _aug(p);                                                \
-       }                                                                      \
-       RB_GENERATE_INTERNAL(_name, _type, _field, _cmp, _name##_RB_AUGMENT)
-
-#define RB_GENERATE(_name, _type, _field, _cmp)                                \
-       RB_GENERATE_INTERNAL(_name, _type, _field, _cmp, NULL)
+#define RB_PROTOTYPE(_name, _type, _field, _cmp)                       \
+extern const struct rb_type *const _name##_RB_TYPE;                    \
+                                                                       \
+__attribute__((__unused__)) static inline void                         \
+_name##_RB_INIT(struct _name *head)                                    \
+{                                                                      \
+       _rb_init(&head->rbh_root);                                      \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_INSERT(struct _name *head, struct _type *elm)               \
+{                                                                      \
+       return _rb_insert(_name##_RB_TYPE, &head->rbh_root, elm);       \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_REMOVE(struct _name *head, struct _type *elm)               \
+{                                                                      \
+       return _rb_remove(_name##_RB_TYPE, &head->rbh_root, elm);       \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_FIND(struct _name *head, const struct _type *key)           \
+{                                                                      \
+       return _rb_find(_name##_RB_TYPE, &head->rbh_root, key); \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_NFIND(struct _name *head, const struct _type *key)          \
+{                                                                      \
+       return _rb_nfind(_name##_RB_TYPE, &head->rbh_root, key);        \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_ROOT(struct _name *head)                                    \
+{                                                                      \
+       return _rb_root(_name##_RB_TYPE, &head->rbh_root);              \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline int                          \
+_name##_RB_EMPTY(struct _name *head)                                   \
+{                                                                      \
+       return _rb_empty(&head->rbh_root);                              \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_MIN(struct _name *head)                                     \
+{                                                                      \
+       return _rb_min(_name##_RB_TYPE, &head->rbh_root);               \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_MAX(struct _name *head)                                     \
+{                                                                      \
+       return _rb_max(_name##_RB_TYPE, &head->rbh_root);               \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_NEXT(struct _type *elm)                                     \
+{                                                                      \
+       return _rb_next(_name##_RB_TYPE, elm);                          \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_PREV(struct _type *elm)                                     \
+{                                                                      \
+       return _rb_prev(_name##_RB_TYPE, elm);                          \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_LEFT(struct _type *elm)                                     \
+{                                                                      \
+       return _rb_left(_name##_RB_TYPE, elm);                          \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_RIGHT(struct _type *elm)                                    \
+{                                                                      \
+       return _rb_right(_name##_RB_TYPE, elm);                 \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline struct _type *               \
+_name##_RB_PARENT(struct _type *elm)                                   \
+{                                                                      \
+       return _rb_parent(_name##_RB_TYPE, elm);                        \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline void                         \
+_name##_RB_SET_LEFT(struct _type *elm, struct _type *left)             \
+{                                                                      \
+       return _rb_set_left(_name##_RB_TYPE, elm, left);                \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline void                         \
+_name##_RB_SET_RIGHT(struct _type *elm, struct _type *right)           \
+{                                                                      \
+       return _rb_set_right(_name##_RB_TYPE, elm, right);              \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline void                         \
+_name##_RB_SET_PARENT(struct _type *elm, struct _type *parent)         \
+{                                                                      \
+       return _rb_set_parent(_name##_RB_TYPE, elm, parent);            \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline void                         \
+_name##_RB_POISON(struct _type *elm, unsigned long poison)             \
+{                                                                      \
+       return _rb_poison(_name##_RB_TYPE, elm, poison);                \
+}                                                                      \
+                                                                       \
+__attribute__((__unused__)) static inline int                          \
+_name##_RB_CHECK(struct _type *elm, unsigned long poison)              \
+{                                                                      \
+       return _rb_check(_name##_RB_TYPE, elm, poison);         \
+}
+
+#define RB_GENERATE_INTERNAL(_name, _type, _field, _cmp, _aug)         \
+static int                                                             \
+_name##_RB_COMPARE(const void *lptr, const void *rptr)                 \
+{                                                                      \
+       const struct _type *l = lptr, *r = rptr;                        \
+       return _cmp(l, r);                                              \
+}                                                                      \
+static const struct rb_type _name##_RB_INFO = {                        \
+       _name##_RB_COMPARE,                                             \
+       _aug,                                                           \
+       offsetof(struct _type, _field),                                 \
+};                                                                     \
+const struct rb_type *const _name##_RB_TYPE = &_name##_RB_INFO;
+
+#define RB_GENERATE_AUGMENT(_name, _type, _field, _cmp, _aug)          \
+static void                                                            \
+_name##_RB_AUGMENT(void *ptr)                                          \
+{                                                                      \
+       struct _type *p = ptr;                                          \
+       return _aug(p);                                                 \
+}                                                                      \
+RB_GENERATE_INTERNAL(_name, _type, _field, _cmp, _name##_RB_AUGMENT)
+
+#define RB_GENERATE(_name, _type, _field, _cmp)                        \
+    RB_GENERATE_INTERNAL(_name, _type, _field, _cmp, NULL)
 
 #define RB_INIT(_name, _head)          _name##_RB_INIT(_head)
 #define RB_INSERT(_name, _head, _elm)  _name##_RB_INSERT(_head, _elm)
@@ -546,20 +525,24 @@ int _rb_check(const struct rb_type *, void *, unsigned long);
 #define RB_POISON(_name, _elm, _p)     _name##_RB_POISON(_elm, _p)
 #define RB_CHECK(_name, _elm, _p)      _name##_RB_CHECK(_elm, _p)
 
-#define RB_FOREACH(_e, _name, _head)                                           \
-       for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
+#define RB_FOREACH(_e, _name, _head)                                   \
+       for ((_e) = RB_MIN(_name, (_head));                             \
+            (_e) != NULL;                                              \
             (_e) = RB_NEXT(_name, (_e)))
 
-#define RB_FOREACH_SAFE(_e, _name, _head, _n)                                  \
-       for ((_e) = RB_MIN(_name, (_head));                                    \
-            (_e) != NULL && ((_n) = RB_NEXT(_name, (_e)), 1); (_e) = (_n))
+#define RB_FOREACH_SAFE(_e, _name, _head, _n)                          \
+       for ((_e) = RB_MIN(_name, (_head));                             \
+            (_e) != NULL && ((_n) = RB_NEXT(_name, (_e)), 1);  \
+            (_e) = (_n))
 
-#define RB_FOREACH_REVERSE(_e, _name, _head)                                   \
-       for ((_e) = RB_MAX(_name, (_head)); (_e) != NULL;                      \
+#define RB_FOREACH_REVERSE(_e, _name, _head)                           \
+       for ((_e) = RB_MAX(_name, (_head));                             \
+            (_e) != NULL;                                              \
             (_e) = RB_PREV(_name, (_e)))
 
-#define RB_FOREACH_REVERSE_SAFE(_e, _name, _head, _n)                          \
-       for ((_e) = RB_MAX(_name, (_head));                                    \
-            (_e) != NULL && ((_n) = RB_PREV(_name, (_e)), 1); (_e) = (_n))
+#define RB_FOREACH_REVERSE_SAFE(_e, _name, _head, _n)                  \
+       for ((_e) = RB_MAX(_name, (_head));                             \
+            (_e) != NULL && ((_n) = RB_PREV(_name, (_e)), 1);  \
+            (_e) = (_n))
 
-#endif /* _SYS_TREE_H_ */
+#endif /* _SYS_TREE_H_ */
index a598548c68c8c7c88843c0d769968c9689a877c9..d7a0db6807664a692c4362d18003c4720c69678b 100644 (file)
@@ -1918,9 +1918,8 @@ int prefix_bgp_show_prefix_list(struct vty *vty, afi_t afi, char *name,
                        json_object_object_add(json, "ipv6PrefixList",
                                               json_prefix);
 
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                vty_out(vty, "ip%s prefix-list %s: %d entries\n",
index 6a37d7de36ca19527207155d2ec1a4bd12ea0702..88b13cd99f209c506ee969cd67c02610b214f09f 100644 (file)
@@ -1151,9 +1151,8 @@ const char *prefix2str(union prefixconstptr pu, char *str, int size)
        switch (p->family) {
        case AF_INET:
        case AF_INET6:
-               snprintf(str, size, "%s/%d",
-                        inet_ntop(p->family, &p->u.prefix, buf,
-                                  PREFIX2STR_BUFFER),
+               snprintf(str, size, "%s/%d", inet_ntop(p->family, &p->u.prefix,
+                                                      buf, PREFIX2STR_BUFFER),
                         p->prefixlen);
                break;
 
index ab9e49f7afa2c478bc6f16d4338d7d4a8a3d2590..ce13dcfa0a71a1f9c4f055502d47780eb526ac78 100644 (file)
@@ -53,9 +53,9 @@ struct ethaddr {
 
 
 /* length is the number of valuable bits of prefix structure
- * 18 bytes is current length in structure, if address is ipv4
- * 30 bytes is in case of ipv6
- */
+* 18 bytes is current length in structure, if address is ipv4
+* 30 bytes is in case of ipv6
+*/
 #define PREFIX_LEN_ROUTE_TYPE_5_IPV4 (18*8)
 #define PREFIX_LEN_ROUTE_TYPE_5_IPV6 (30*8)
 
index 81673f84a10b5ca3a0cf875a244fae41b0b69e88..c971596117f1b810600af31667115270f7a89b9c 100644 (file)
@@ -99,131 +99,113 @@ static struct {
        pvalue_t *system_caps;
 } cap_map[ZCAP_MAX] = {
 #ifdef HAVE_LCAPS /* Quagga -> Linux capabilities mappings */
-       [ZCAP_SETID] =
-               {
-                       2,
-                       (pvalue_t[]){CAP_SETGID, CAP_SETUID},
-               },
-       [ZCAP_BIND] =
-               {
-                       1,
-                       (pvalue_t[]){CAP_NET_BIND_SERVICE},
-               },
-       [ZCAP_NET_ADMIN] =
-               {
-                       1,
-                       (pvalue_t[]){CAP_NET_ADMIN},
-               },
-       [ZCAP_NET_RAW] =
-               {
-                       1,
-                       (pvalue_t[]){CAP_NET_RAW},
-               },
-       [ZCAP_CHROOT] =
-               {
-                       1,
-                       (pvalue_t[]){
-                               CAP_SYS_CHROOT,
+               [ZCAP_SETID] =
+                       {
+                               2, (pvalue_t[]){CAP_SETGID, CAP_SETUID},
+                       },
+               [ZCAP_BIND] =
+                       {
+                               1, (pvalue_t[]){CAP_NET_BIND_SERVICE},
+                       },
+               [ZCAP_NET_ADMIN] =
+                       {
+                               1, (pvalue_t[]){CAP_NET_ADMIN},
+                       },
+               [ZCAP_NET_RAW] =
+                       {
+                               1, (pvalue_t[]){CAP_NET_RAW},
+                       },
+               [ZCAP_CHROOT] =
+                       {
+                               1,
+                               (pvalue_t[]){
+                                       CAP_SYS_CHROOT,
+                               },
+                       },
+               [ZCAP_NICE] =
+                       {
+                               1, (pvalue_t[]){CAP_SYS_NICE},
+                       },
+               [ZCAP_PTRACE] =
+                       {
+                               1, (pvalue_t[]){CAP_SYS_PTRACE},
+                       },
+               [ZCAP_DAC_OVERRIDE] =
+                       {
+                               1, (pvalue_t[]){CAP_DAC_OVERRIDE},
+                       },
+               [ZCAP_READ_SEARCH] =
+                       {
+                               1, (pvalue_t[]){CAP_DAC_READ_SEARCH},
+                       },
+               [ZCAP_SYS_ADMIN] =
+                       {
+                               1, (pvalue_t[]){CAP_SYS_ADMIN},
+                       },
+               [ZCAP_FOWNER] =
+                       {
+                               1, (pvalue_t[]){CAP_FOWNER},
                        },
-               },
-       [ZCAP_NICE] =
-               {
-                       1,
-                       (pvalue_t[]){CAP_SYS_NICE},
-               },
-       [ZCAP_PTRACE] =
-               {
-                       1,
-                       (pvalue_t[]){CAP_SYS_PTRACE},
-               },
-       [ZCAP_DAC_OVERRIDE] =
-               {
-                       1,
-                       (pvalue_t[]){CAP_DAC_OVERRIDE},
-               },
-       [ZCAP_READ_SEARCH] =
-               {
-                       1,
-                       (pvalue_t[]){CAP_DAC_READ_SEARCH},
-               },
-       [ZCAP_SYS_ADMIN] =
-               {
-                       1,
-                       (pvalue_t[]){CAP_SYS_ADMIN},
-               },
-       [ZCAP_FOWNER] =
-               {
-                       1,
-                       (pvalue_t[]){CAP_FOWNER},
-               },
 #elif defined(HAVE_SOLARIS_CAPABILITIES) /* HAVE_LCAPS */
-       /* Quagga -> Solaris privilege mappings */
-       [ZCAP_SETID] =
-               {
-                       1,
-                       (pvalue_t[]){PRIV_PROC_SETID},
-               },
-       [ZCAP_BIND] =
-               {
-                       1,
-                       (pvalue_t[]){PRIV_NET_PRIVADDR},
-               },
+               /* Quagga -> Solaris privilege mappings */
+               [ZCAP_SETID] =
+                       {
+                               1, (pvalue_t[]){PRIV_PROC_SETID},
+                       },
+               [ZCAP_BIND] =
+                       {
+                               1, (pvalue_t[]){PRIV_NET_PRIVADDR},
+                       },
 /* IP_CONFIG is a subset of NET_CONFIG and is allowed in zones */
 #ifdef PRIV_SYS_IP_CONFIG
-       [ZCAP_NET_ADMIN] =
-               {
-                       1,
-                       (pvalue_t[]){PRIV_SYS_IP_CONFIG},
-               },
+               [ZCAP_NET_ADMIN] =
+                       {
+                               1, (pvalue_t[]){PRIV_SYS_IP_CONFIG},
+                       },
 #else
-       [ZCAP_NET_ADMIN] =
-               {
-                       1,
-                       (pvalue_t[]){PRIV_SYS_NET_CONFIG},
-               },
+               [ZCAP_NET_ADMIN] =
+                       {
+                               1, (pvalue_t[]){PRIV_SYS_NET_CONFIG},
+                       },
 #endif
-       [ZCAP_NET_RAW] =
-               {
-                       2,
-                       (pvalue_t[]){PRIV_NET_RAWACCESS, PRIV_NET_ICMPACCESS},
-               },
-       [ZCAP_CHROOT] =
-               {
-                       1,
-                       (pvalue_t[]){PRIV_PROC_CHROOT},
-               },
-       [ZCAP_NICE] =
-               {
-                       1,
-                       (pvalue_t[]){PRIV_PROC_PRIOCNTL},
-               },
-       [ZCAP_PTRACE] =
-               {
-                       1,
-                       (pvalue_t[]){PRIV_PROC_SESSION},
-               },
-       [ZCAP_DAC_OVERRIDE] =
-               {
-                       5,
-                       (pvalue_t[]){PRIV_FILE_DAC_EXECUTE, PRIV_FILE_DAC_READ,
-                                    PRIV_FILE_DAC_SEARCH, PRIV_FILE_DAC_WRITE,
-                                    PRIV_FILE_DAC_SEARCH},
-               },
-       [ZCAP_READ_SEARCH] =
-               {
-                       2,
-                       (pvalue_t[]){PRIV_FILE_DAC_SEARCH, PRIV_FILE_DAC_READ},
-               },
-       [ZCAP_SYS_ADMIN] =
-               {
-                       1,
-                       (pvalue_t[]){PRIV_SYS_ADMIN},
-               },
-       [ZCAP_FOWNER] =
-               {
-                       1,
-                       (pvalue_t[]){PRIV_FILE_OWNER},
-               },
+               [ZCAP_NET_RAW] =
+                       {
+                               2, (pvalue_t[]){PRIV_NET_RAWACCESS,
+                                               PRIV_NET_ICMPACCESS},
+                       },
+               [ZCAP_CHROOT] =
+                       {
+                               1, (pvalue_t[]){PRIV_PROC_CHROOT},
+                       },
+               [ZCAP_NICE] =
+                       {
+                               1, (pvalue_t[]){PRIV_PROC_PRIOCNTL},
+                       },
+               [ZCAP_PTRACE] =
+                       {
+                               1, (pvalue_t[]){PRIV_PROC_SESSION},
+                       },
+               [ZCAP_DAC_OVERRIDE] =
+                       {
+                               5, (pvalue_t[]){PRIV_FILE_DAC_EXECUTE,
+                                               PRIV_FILE_DAC_READ,
+                                               PRIV_FILE_DAC_SEARCH,
+                                               PRIV_FILE_DAC_WRITE,
+                                               PRIV_FILE_DAC_SEARCH},
+                       },
+               [ZCAP_READ_SEARCH] =
+                       {
+                               2, (pvalue_t[]){PRIV_FILE_DAC_SEARCH,
+                                               PRIV_FILE_DAC_READ},
+                       },
+               [ZCAP_SYS_ADMIN] =
+                       {
+                               1, (pvalue_t[]){PRIV_SYS_ADMIN},
+                       },
+               [ZCAP_FOWNER] =
+                       {
+                               1, (pvalue_t[]){PRIV_FILE_OWNER},
+                       },
 #endif /* HAVE_SOLARIS_CAPABILITIES */
 };
 
@@ -785,7 +767,7 @@ void zprivs_init(struct zebra_privs_t *zprivs)
 
        if (zprivs->vty_group)
        /* Add the vty_group to the supplementary groups so it can be chowned to
-        */
+          */
        {
                if (zprivs_state.vtygrp == (gid_t)-1) {
                        fprintf(stderr,
index 40daeae41c869b23b64ccee65077595e694a08d4..3d1add25dc5dc02a1ccc25ed0a19b960ae2c3995 100644 (file)
@@ -1232,9 +1232,8 @@ int route_map_delete_match(struct route_map_index *index,
                return 1;
 
        for (rule = index->match_list.head; rule; rule = rule->next)
-               if (rule->cmd == cmd
-                   && (rulecmp(rule->rule_str, match_arg) == 0
-                       || match_arg == NULL)) {
+               if (rule->cmd == cmd && (rulecmp(rule->rule_str, match_arg) == 0
+                                        || match_arg == NULL)) {
                        route_map_rule_delete(&index->match_list, rule);
                        /* Execute event hook. */
                        if (route_map_master.event_hook) {
@@ -1320,9 +1319,8 @@ int route_map_delete_set(struct route_map_index *index, const char *set_name,
                return 1;
 
        for (rule = index->set_list.head; rule; rule = rule->next)
-               if ((rule->cmd == cmd)
-                   && (rulecmp(rule->rule_str, set_arg) == 0
-                       || set_arg == NULL)) {
+               if ((rule->cmd == cmd) && (rulecmp(rule->rule_str, set_arg) == 0
+                                          || set_arg == NULL)) {
                        route_map_rule_delete(&index->set_list, rule);
                        /* Execute event hook. */
                        if (route_map_master.event_hook) {
index 2eebb47d6cdd439c4f5e688175d2316be3a19336..2a04fa23cb793f00fab46b7f05a5a97a221f47a8 100644 (file)
@@ -207,14 +207,14 @@ exit_handler(int signo
             ,
             siginfo_t *siginfo, void *context
 #endif
-)
+            )
 {
        zlog_signal(signo, "exiting..."
 #ifdef SA_SIGINFO
                    ,
                    siginfo, program_counter(context)
 #endif
-       );
+                           );
        _exit(128 + signo);
 }
 
@@ -224,7 +224,7 @@ core_handler(int signo
             ,
             siginfo_t *siginfo, void *context
 #endif
-)
+            )
 {
        /* make sure we don't hang in here.  default for SIGALRM is terminate.
         * - if we're in backtrace for more than a second, abort. */
@@ -243,7 +243,7 @@ core_handler(int signo
                    ,
                    siginfo, program_counter(context)
 #endif
-       );
+                           );
        /* dump memory stats on core */
        log_memstats_stderr("core_handler");
        abort();
@@ -290,7 +290,7 @@ static void trap_default_signals(void)
                                ,
                                siginfo_t *info, void *context
 #endif
-               );
+                               );
        } sigmap[] = {
                {core_signals, array_size(core_signals), core_handler},
                {exit_signals, array_size(exit_signals), exit_handler},
index 56c2e874a2576a0c6a5f6759167639bc5c6ab248..9a0063df213e413ff0a4fc7b63da45710ce484e5 100644 (file)
@@ -210,25 +210,22 @@ static void smux_getresp_send(oid objid[], size_t objid_len, long reqid,
        ptr = asn_build_sequence(ptr, &len, (u_char)SMUX_GETRSP, 0);
        h1e = ptr;
 
-       ptr = asn_build_int(
-               ptr, &len,
-               (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), &reqid,
-               sizeof(reqid));
+       ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
+                                               | ASN_INTEGER),
+                           &reqid, sizeof(reqid));
 
        if (debug_smux)
                zlog_debug("SMUX GETRSP errstat: %ld", errstat);
 
-       ptr = asn_build_int(
-               ptr, &len,
-               (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), &errstat,
-               sizeof(errstat));
+       ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
+                                               | ASN_INTEGER),
+                           &errstat, sizeof(errstat));
        if (debug_smux)
                zlog_debug("SMUX GETRSP errindex: %ld", errindex);
 
-       ptr = asn_build_int(
-               ptr, &len,
-               (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
-               &errindex, sizeof(errindex));
+       ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
+                                               | ASN_INTEGER),
+                           &errindex, sizeof(errindex));
 
        h2 = ptr;
        /* Place holder h2 for one variable */
@@ -887,28 +884,24 @@ static int smux_open(int sock)
 
        /* SMUX Open. */
        version = 0;
-       ptr = asn_build_int(
-               ptr, &len,
-               (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), &version,
-               sizeof(version));
+       ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
+                                               | ASN_INTEGER),
+                           &version, sizeof(version));
 
        /* SMUX connection oid. */
-       ptr = asn_build_objid(
-               ptr, &len,
-               (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID),
-               smux_oid, smux_oid_len);
+       ptr = asn_build_objid(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
+                                                 | ASN_OBJECT_ID),
+                             smux_oid, smux_oid_len);
 
        /* SMUX connection description. */
-       ptr = asn_build_string(
-               ptr, &len,
-               (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR),
-               (const u_char *)progname, strlen(progname));
+       ptr = asn_build_string(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
+                                                  | ASN_OCTET_STR),
+                              (const u_char *)progname, strlen(progname));
 
        /* SMUX connection password. */
-       ptr = asn_build_string(
-               ptr, &len,
-               (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR),
-               (u_char *)smux_passwd, strlen(smux_passwd));
+       ptr = asn_build_string(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
+                                                  | ASN_OCTET_STR),
+                              (u_char *)smux_passwd, strlen(smux_passwd));
 
        /* Fill in real SMUX header.  We exclude ASN header size (2). */
        len = BUFSIZ;
@@ -948,31 +941,27 @@ int smux_trap(struct variable *vp, size_t vp_len, const oid *ename,
        ptr = asn_build_header(ptr, &len, (u_char)SMUX_TRAP, 0);
 
        /* Sub agent enterprise oid. */
-       ptr = asn_build_objid(
-               ptr, &len,
-               (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID),
-               smux_oid, smux_oid_len);
+       ptr = asn_build_objid(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
+                                                 | ASN_OBJECT_ID),
+                             smux_oid, smux_oid_len);
 
        /* IP address. */
        addr.s_addr = 0;
-       ptr = asn_build_string(
-               ptr, &len,
-               (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_IPADDRESS),
-               (u_char *)&addr, sizeof(addr));
+       ptr = asn_build_string(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
+                                                  | ASN_IPADDRESS),
+                              (u_char *)&addr, sizeof(addr));
 
        /* Generic trap integer. */
        val = SNMP_TRAP_ENTERPRISESPECIFIC;
-       ptr = asn_build_int(
-               ptr, &len,
-               (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
-               (long *)&val, sizeof(val));
+       ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
+                                               | ASN_INTEGER),
+                           (long *)&val, sizeof(val));
 
        /* Specific trap integer. */
        val = sptrap;
-       ptr = asn_build_int(
-               ptr, &len,
-               (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
-               (long *)&val, sizeof(val));
+       ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
+                                               | ASN_INTEGER),
+                           (long *)&val, sizeof(val));
 
        /* Timeticks timestamp. */
        val = 0;
index a1bde13a9c63e6543724beece6fa0eebb4548272..d100991a3319fc6919c0fdcc65aeca821da5d852 100644 (file)
@@ -261,9 +261,8 @@ int setsockopt_ipv4_multicast(int sock, int optname, struct in_addr if_addr,
                zlog_info(
                        "setsockopt_ipv4_multicast attempting to drop and "
                        "re-add (fd %d, mcast %s, ifindex %u)",
-                       sock,
-                       inet_ntop(AF_INET, &mreqn.imr_multiaddr, buf[0],
-                                 sizeof(buf[0])),
+                       sock, inet_ntop(AF_INET, &mreqn.imr_multiaddr, buf[0],
+                                       sizeof(buf[0])),
                        ifindex);
                setsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP, (void *)&mreqn,
                           sizeof(mreqn));
@@ -304,9 +303,8 @@ int setsockopt_ipv4_multicast(int sock, int optname, struct in_addr if_addr,
                zlog_info(
                        "setsockopt_ipv4_multicast attempting to drop and "
                        "re-add (fd %d, mcast %s, ifindex %u)",
-                       sock,
-                       inet_ntop(AF_INET, &mreq.imr_multiaddr, buf[0],
-                                 sizeof(buf[0])),
+                       sock, inet_ntop(AF_INET, &mreq.imr_multiaddr, buf[0],
+                                       sizeof(buf[0])),
                        ifindex);
                setsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP, (void *)&mreq,
                           sizeof(mreq));
index 494fad7c3844d19ce9bb800b5710634e32367cc2..00579550e4723a2891d584b721c5cfad3524247e 100644 (file)
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -2822,9 +2822,7 @@ static int vty_config_write(struct vty *vty)
 }
 
 struct cmd_node vty_node = {
-       VTY_NODE,
-       "%s(config-line)# ",
-       1,
+       VTY_NODE, "%s(config-line)# ", 1,
 };
 
 /* Reset all VTY status. */
index 3adaf4f98c44648c85bb439f12a45cb6a4db3898..5c06d933e6fb277d38d9d537f793c5354e728d94 100644 (file)
@@ -34,10 +34,9 @@ extern void _zlog_assert_failed(const char *assertion, const char *file,
 #endif
 
 #define zassert(EX)                                                            \
-       ((void)((EX) ? 0                                                       \
-                    : (_zlog_assert_failed(#EX, __FILE__, __LINE__,           \
-                                           __ASSERT_FUNCTION),                \
-                       0)))
+       ((void)((EX) ? 0 : (_zlog_assert_failed(#EX, __FILE__, __LINE__,       \
+                                               __ASSERT_FUNCTION),            \
+                           0)))
 
 #undef assert
 #define assert(EX) zassert(EX)
index b4511ed2cb17ccb839935041e779684a2d64b9a0..a54d8749a399d2b99ef6c8d0ad2ff97dfd4c6b8a 100644 (file)
@@ -1480,9 +1480,8 @@ struct connected *zebra_interface_address_read(int type, struct stream *s,
                                zlog_warn(
                                        "warning: interface %s address %s "
                                        "with peer flag set, but no peer address!",
-                                       ifp->name,
-                                       prefix2str(ifc->address, buf,
-                                                  sizeof buf));
+                                       ifp->name, prefix2str(ifc->address, buf,
+                                                             sizeof buf));
                                UNSET_FLAG(ifc->flags, ZEBRA_IFA_PEER);
                        }
                }
index 5d344aca71da0da2a2322910bd8a624cc5edb806..7f8341d0e42c67ab91a8fad2eca5c28760fc4853 100644 (file)
@@ -848,9 +848,7 @@ static route_map_result_t ospf6_routemap_rule_match_tag(void *rule,
 }
 
 static struct route_map_rule_cmd ospf6_routemap_rule_match_tag_cmd = {
-       "tag",
-       ospf6_routemap_rule_match_tag,
-       route_map_rule_tag_compile,
+       "tag", ospf6_routemap_rule_match_tag, route_map_rule_tag_compile,
        route_map_rule_tag_free,
 };
 
@@ -885,8 +883,7 @@ static void ospf6_routemap_rule_set_metric_type_free(void *rule)
 }
 
 struct route_map_rule_cmd ospf6_routemap_rule_set_metric_type_cmd = {
-       "metric-type",
-       ospf6_routemap_rule_set_metric_type,
+       "metric-type", ospf6_routemap_rule_set_metric_type,
        ospf6_routemap_rule_set_metric_type_compile,
        ospf6_routemap_rule_set_metric_type_free,
 };
@@ -921,8 +918,7 @@ static void ospf6_routemap_rule_set_metric_free(void *rule)
 }
 
 struct route_map_rule_cmd ospf6_routemap_rule_set_metric_cmd = {
-       "metric",
-       ospf6_routemap_rule_set_metric,
+       "metric", ospf6_routemap_rule_set_metric,
        ospf6_routemap_rule_set_metric_compile,
        ospf6_routemap_rule_set_metric_free,
 };
@@ -960,8 +956,7 @@ static void ospf6_routemap_rule_set_forwarding_free(void *rule)
 }
 
 struct route_map_rule_cmd ospf6_routemap_rule_set_forwarding_cmd = {
-       "forwarding-address",
-       ospf6_routemap_rule_set_forwarding,
+       "forwarding-address", ospf6_routemap_rule_set_forwarding,
        ospf6_routemap_rule_set_forwarding_compile,
        ospf6_routemap_rule_set_forwarding_free,
 };
@@ -983,9 +978,7 @@ static route_map_result_t ospf6_routemap_rule_set_tag(void *rule,
 }
 
 static struct route_map_rule_cmd ospf6_routemap_rule_set_tag_cmd = {
-       "tag",
-       ospf6_routemap_rule_set_tag,
-       route_map_rule_tag_compile,
+       "tag", ospf6_routemap_rule_set_tag, route_map_rule_tag_compile,
        route_map_rule_tag_free,
 };
 
index 7921df884e593bb237c3a7748ae490f08074776a..1d17a1c233ffd59f3ef856efe4bbe7d530f7aa25 100644 (file)
@@ -1402,10 +1402,9 @@ DEFUN (ipv6_ospf6_priority,
 
        oi->priority = strtol(argv[idx_number]->arg, NULL, 10);
 
-       if (oi->area
-           && (oi->state == OSPF6_INTERFACE_DROTHER
-               || oi->state == OSPF6_INTERFACE_BDR
-               || oi->state == OSPF6_INTERFACE_DR))
+       if (oi->area && (oi->state == OSPF6_INTERFACE_DROTHER
+                        || oi->state == OSPF6_INTERFACE_BDR
+                        || oi->state == OSPF6_INTERFACE_DR))
                ospf6_interface_state_change(dr_election(oi), oi);
 
        return CMD_SUCCESS;
index 66e5714d07b602e31f0b792e969859e75db5c606..015776a1743862ec60b1b1cae5568e4e3df688d3 100644 (file)
@@ -73,9 +73,8 @@ static char *ospf6_router_lsa_get_nbr_id(struct ospf6_lsa *lsa, char *buf,
 
                lsdesc = (struct ospf6_router_lsdesc
                                  *)(start
-                                    + pos
-                                              * (sizeof(struct
-                                                        ospf6_router_lsdesc)));
+                                    + pos * (sizeof(struct
+                                                    ospf6_router_lsdesc)));
                if ((char *)lsdesc < end) {
                        if (buf && (buflen > INET_ADDRSTRLEN * 2)) {
                                inet_ntop(AF_INET,
@@ -1438,7 +1437,7 @@ static void ospf6_brouter_debug_print(struct ospf6_route *brouter)
        char brouter_name[16];
        char area_name[16];
        char destination[64];
-       char installed[16], changed[16];
+       char installed[64], changed[64];
        struct timeval now, res;
        char id[16], adv_router[16];
        char capa[16], options[16];
index 329060a16f7b2f685e919c7e0c02f5dd59802ba3..e1a431ea07245f57dd536897e2355077f65733b7 100644 (file)
@@ -467,7 +467,7 @@ void ospf6_lsa_show(struct vty *vty, struct ospf6_lsa *lsa)
        char adv_router[64], id[64];
        struct ospf6_lsa_handler *handler;
        struct timeval now, res;
-       char duration[16];
+       char duration[64];
 
        assert(lsa && lsa->header);
 
index 78f1148243eace68e0171b15e38321ae7363f072..aa5f05ce172b92a08baa1eac21005493be6fc6a0 100644 (file)
@@ -869,7 +869,7 @@ static unsigned ospf6_prefixes_examin(
        unsigned length,
        const u_int32_t req_num_pfxs /* always compared with the actual number
                                        of prefixes */
-)
+       )
 {
        u_char requested_pfx_bytes;
        u_int32_t real_num_pfxs = 0;
@@ -1066,7 +1066,7 @@ static unsigned ospf6_lsa_examin(struct ospf6_lsa_header *lsah,
                        lsalen - OSPF6_LSA_HEADER_SIZE
                                - OSPF6_LINK_LSA_MIN_SIZE,
                        ntohl(link_lsa->prefix_num) /* 32 bits */
-               );
+                       );
        case OSPF6_LSTYPE_INTRA_PREFIX:
                /* RFC5340 A.4.10, LSA header + OSPF6_INTRA_PREFIX_LSA_MIN_SIZE
                   bytes
@@ -1084,7 +1084,7 @@ static unsigned ospf6_lsa_examin(struct ospf6_lsa_header *lsah,
                        lsalen - OSPF6_LSA_HEADER_SIZE
                                - OSPF6_INTRA_PREFIX_LSA_MIN_SIZE,
                        ntohs(intra_prefix_lsa->prefix_num) /* 16 bits */
-               );
+                       );
        }
        /* No additional validation is possible for unknown LSA types, which are
           themselves valid in OPSFv3, hence the default decision is to accept.
@@ -1270,7 +1270,7 @@ static unsigned ospf6_packet_examin(struct ospf6_header *oh,
                                                    + OSPF6_LS_UPD_MIN_SIZE),
                        bytesonwire - OSPF6_HEADER_SIZE - OSPF6_LS_UPD_MIN_SIZE,
                        0, ntohl(lsupd->lsa_number) /* 32 bits */
-               );
+                       );
                break;
        case OSPF6_MESSAGE_TYPE_LSACK:
                /* RFC5340 A.3.6, packet header + N>=0 header-only LSAs. */
index a21da074831406a0b5f98c742e53065d423286b8..bde89f54a604b1be465f297c4d6caefec7d75d80 100644 (file)
@@ -582,10 +582,10 @@ int inactivity_timer(struct thread *thread)
 static void ospf6_neighbor_show(struct vty *vty, struct ospf6_neighbor *on)
 {
        char router_id[16];
-       char duration[16];
+       char duration[64];
        struct timeval res;
        char nstate[16];
-       char deadtime[16];
+       char deadtime[64];
        long h, m, s;
 
        /* Router-ID (Name) */
@@ -640,7 +640,7 @@ static void ospf6_neighbor_show_drchoice(struct vty *vty,
 {
        char router_id[16];
        char drouter[16], bdrouter[16];
-       char duration[16];
+       char duration[64];
        struct timeval now, res;
 
        /*
index 5e8fd0e15d7bf5f47902b43f45f0131fc47c9578..e0e9fc9449074f42b366f3deecf14c5d4deaa21d 100644 (file)
@@ -945,7 +945,7 @@ void ospf6_route_show(struct vty *vty, struct ospf6_route *route)
 {
        int i;
        char destination[PREFIX2STR_BUFFER], nexthop[64];
-       char duration[16];
+       char duration[64];
        const char *ifname;
        struct timeval now, res;
        struct listnode *node;
@@ -991,7 +991,7 @@ void ospf6_route_show_detail(struct vty *vty, struct ospf6_route *route)
        char destination[PREFIX2STR_BUFFER], nexthop[64];
        char area_id[16], id[16], adv_router[16], capa[16], options[16];
        struct timeval now, res;
-       char duration[16];
+       char duration[64];
        struct listnode *node;
        struct ospf6_nexthop *nh;
 
index 84993f0b4c89b617a7e596f7845a8c96ab33d519..d33f41730e2130b9c1f0403f9f5e4b2c3476bde5 100644 (file)
@@ -347,8 +347,7 @@ static int config_write_ospf6_zebra(struct vty *vty)
 
 /* Zebra node structure. */
 static struct cmd_node zebra_node = {
-       ZEBRA_NODE,
-       "%s(config-zebra)# ",
+       ZEBRA_NODE, "%s(config-zebra)# ",
 };
 
 #define ADD    0
index 41c21ee9b690bc7c9e43d283985e1ba8380690ba..c6d4364fa3c1adefe9e9f8309dbe22ba03e6cd0a 100644 (file)
@@ -1034,20 +1034,22 @@ static void ospf_abr_process_network_rt(struct ospf *ospf,
                        continue;
                }
 
-               if (or->path_type == OSPF_PATH_INTRA_AREA
-                             && !ospf_abr_should_announce(
-                                        ospf, (struct prefix_ipv4 *)&rn->p,
-                                        or)) {
+               if (
+                       or->path_type == OSPF_PATH_INTRA_AREA
+                                 && !ospf_abr_should_announce(
+                                            ospf, (struct prefix_ipv4 *)&rn->p,
+                                            or)) {
                        if (IS_DEBUG_OSPF_EVENT)
                                zlog_debug(
                                        "ospf_abr_process_network_rt(): denied by export-list");
                        continue;
                }
 
-               if (or->path_type == OSPF_PATH_INTRA_AREA
-                             && !ospf_abr_plist_out_check(
-                                        area, or,
-                                        (struct prefix_ipv4 *)&rn->p)) {
+               if (
+                       or->path_type == OSPF_PATH_INTRA_AREA
+                                 && !ospf_abr_plist_out_check(
+                                            area, or,
+                                            (struct prefix_ipv4 *)&rn->p)) {
                        if (IS_DEBUG_OSPF_EVENT)
                                zlog_debug(
                                        "ospf_abr_process_network_rt(): denied by prefix-list");
@@ -1269,9 +1271,10 @@ static void ospf_abr_process_router_rt(struct ospf *ospf,
                                continue;
                        }
 
-                       if (or->path_type == OSPF_PATH_INTER_AREA
-                                     && !OSPF_IS_AREA_ID_BACKBONE(
-                                                or->u.std.area_id)) {
+                       if (
+                               or->path_type == OSPF_PATH_INTER_AREA
+                                         && !OSPF_IS_AREA_ID_BACKBONE(
+                                                    or->u.std.area_id)) {
                                if (IS_DEBUG_OSPF_EVENT)
                                        zlog_debug(
                                                "ospf_abr_process_router_rt(): "
index 10570f4e62f85cc7240fa29946176723a362ffad..f1a7433760daf5d7e34456c12b8e364a79aa1b6c 100644 (file)
@@ -131,60 +131,46 @@ const char *ospf_api_typename(int msgtype)
 {
        struct nametab NameTab[] = {
                {
-                       MSG_REGISTER_OPAQUETYPE,
-                       "Register opaque-type",
+                       MSG_REGISTER_OPAQUETYPE, "Register opaque-type",
                },
                {
-                       MSG_UNREGISTER_OPAQUETYPE,
-                       "Unregister opaque-type",
+                       MSG_UNREGISTER_OPAQUETYPE, "Unregister opaque-type",
                },
                {
-                       MSG_REGISTER_EVENT,
-                       "Register event",
+                       MSG_REGISTER_EVENT, "Register event",
                },
                {
-                       MSG_SYNC_LSDB,
-                       "Sync LSDB",
+                       MSG_SYNC_LSDB, "Sync LSDB",
                },
                {
-                       MSG_ORIGINATE_REQUEST,
-                       "Originate request",
+                       MSG_ORIGINATE_REQUEST, "Originate request",
                },
                {
-                       MSG_DELETE_REQUEST,
-                       "Delete request",
+                       MSG_DELETE_REQUEST, "Delete request",
                },
                {
-                       MSG_REPLY,
-                       "Reply",
+                       MSG_REPLY, "Reply",
                },
                {
-                       MSG_READY_NOTIFY,
-                       "Ready notify",
+                       MSG_READY_NOTIFY, "Ready notify",
                },
                {
-                       MSG_LSA_UPDATE_NOTIFY,
-                       "LSA update notify",
+                       MSG_LSA_UPDATE_NOTIFY, "LSA update notify",
                },
                {
-                       MSG_LSA_DELETE_NOTIFY,
-                       "LSA delete notify",
+                       MSG_LSA_DELETE_NOTIFY, "LSA delete notify",
                },
                {
-                       MSG_NEW_IF,
-                       "New interface",
+                       MSG_NEW_IF, "New interface",
                },
                {
-                       MSG_DEL_IF,
-                       "Del interface",
+                       MSG_DEL_IF, "Del interface",
                },
                {
-                       MSG_ISM_CHANGE,
-                       "ISM change",
+                       MSG_ISM_CHANGE, "ISM change",
                },
                {
-                       MSG_NSM_CHANGE,
-                       "NSM change",
+                       MSG_NSM_CHANGE, "NSM change",
                },
        };
 
@@ -205,48 +191,38 @@ const char *ospf_api_errname(int errcode)
 {
        struct nametab NameTab[] = {
                {
-                       OSPF_API_OK,
-                       "OK",
+                       OSPF_API_OK, "OK",
                },
                {
-                       OSPF_API_NOSUCHINTERFACE,
-                       "No such interface",
+                       OSPF_API_NOSUCHINTERFACE, "No such interface",
                },
                {
-                       OSPF_API_NOSUCHAREA,
-                       "No such area",
+                       OSPF_API_NOSUCHAREA, "No such area",
                },
                {
-                       OSPF_API_NOSUCHLSA,
-                       "No such LSA",
+                       OSPF_API_NOSUCHLSA, "No such LSA",
                },
                {
-                       OSPF_API_ILLEGALLSATYPE,
-                       "Illegal LSA type",
+                       OSPF_API_ILLEGALLSATYPE, "Illegal LSA type",
                },
                {
-                       OSPF_API_OPAQUETYPEINUSE,
-                       "Opaque type in use",
+                       OSPF_API_OPAQUETYPEINUSE, "Opaque type in use",
                },
                {
                        OSPF_API_OPAQUETYPENOTREGISTERED,
                        "Opaque type not registered",
                },
                {
-                       OSPF_API_NOTREADY,
-                       "Not ready",
+                       OSPF_API_NOTREADY, "Not ready",
                },
                {
-                       OSPF_API_NOMEMORY,
-                       "No memory",
+                       OSPF_API_NOMEMORY, "No memory",
                },
                {
-                       OSPF_API_ERROR,
-                       "Other error",
+                       OSPF_API_ERROR, "Other error",
                },
                {
-                       OSPF_API_UNDEF,
-                       "Undefined",
+                       OSPF_API_UNDEF, "Undefined",
                },
        };
 
index 2a178a684e9da0be956887083e8b11779cef980a..a5f5971ac01ea0e2aa1e045a808ad495f197f1f5 100644 (file)
@@ -1236,10 +1236,10 @@ static int apiserver_sync_callback(struct ospf_lsa *lsa, void *p_arg,
                        zlog_warn(
                                "apiserver_sync_callback: new_msg_update failed");
 #ifdef NOTYET
-/* Cannot allocate new message. What should we do? */
-/*        ospf_apiserver_free (apiserv);*/ /* Do nothing
-                                             here XXX
-                                             */
+                       /* Cannot allocate new message. What should we do? */
+                       /*        ospf_apiserver_free (apiserv);*/ /* Do nothing
+                                                                     here XXX
+                                                                     */
 #endif
                        goto out;
                }
index f00973d64a8d5aaac0f2f2ac0a7f30329137aff1..c775f2ea2e0daf82723f95afe7469e5b22e1ecae 100644 (file)
@@ -217,7 +217,7 @@ static void ospf_process_self_originated_lsa(struct ospf *ospf,
                break;
        case OSPF_OPAQUE_AS_LSA:
                ospf_opaque_lsa_refresh(new);
-               /* Reconsideration may needed. */ /* XXX */
+                       /* Reconsideration may needed. */ /* XXX */
                break;
        default:
                break;
@@ -281,7 +281,7 @@ int ospf_flood(struct ospf *ospf, struct ospf_neighbor *nbr,
                                        "LSA[Flooding]: Got a self-originated LSA, "
                                        "while local one is initial instance.");
                        ; /* Accept this LSA for quick LSDB resynchronization.
-                          */
+                            */
                } else if (monotime_since(&current->tv_recv, NULL)
                           < ospf->min_ls_arrival * 1000LL) {
                        if (IS_DEBUG_OSPF_EVENT)
index 38ce71293be15daeed1402133bf904170d04f204..c65d8b874361a2dd2b755070390e1adf7da20bad 100644 (file)
@@ -361,8 +361,10 @@ static void ospf_update_network_route(struct ospf *ospf, struct route_table *rt,
        }
 
        if (ospf->abr_type == OSPF_ABR_SHORTCUT) {
-               if (or->path_type == OSPF_PATH_INTRA_AREA
-                             && !OSPF_IS_AREA_ID_BACKBONE(or->u.std.area_id)) {
+               if (
+                       or->path_type == OSPF_PATH_INTRA_AREA
+                                 && !OSPF_IS_AREA_ID_BACKBONE(
+                                            or->u.std.area_id)) {
                        if (IS_DEBUG_OSPF_EVENT)
                                zlog_debug(
                                        "ospf_update_network_route(): Shortcut: "
@@ -648,7 +650,7 @@ void ospf_ia_routing(struct ospf *ospf, struct route_table *rt,
                                                        OSPF_EXAMINE_TRANSIT_SUMMARIES_ALL(
                                                                area, rt, rtrs);
                        } else { /* No active BB connection--consider all areas
-                                 */
+                                   */
                                if (IS_DEBUG_OSPF_EVENT)
                                        zlog_debug(
                                                "ospf_ia_routing(): "
index b4624f400fc4856afe0e41f1aac65a79518fdf8e..4ea8ec26f2acf892d923a212e60f361484b6007a 100644 (file)
@@ -428,9 +428,8 @@ struct ospf_interface *ospf_if_lookup_recv_if(struct ospf *ospf,
                        match = oi;
                else if (prefix_match(CONNECTED_PREFIX(oi->connected),
                                      (struct prefix *)&addr)) {
-                       if ((match == NULL)
-                           || (match->address->prefixlen
-                               < oi->address->prefixlen))
+                       if ((match == NULL) || (match->address->prefixlen
+                                               < oi->address->prefixlen))
                                match = oi;
                }
        }
index 38a17710cdc6b25580077b536b3ada3bdb5204b3..68adf2e10be7198e49c047927d2abe6d298798dc 100644 (file)
@@ -429,8 +429,8 @@ static char link_info_set(struct stream *s, struct in_addr id,
                         *
                         * Simpler just to subtract OSPF_MAX_LSA_SIZE though.
                         */
-                       ret = stream_resize(s, OSPF_MAX_PACKET_SIZE
-                                                      - OSPF_MAX_LSA_SIZE);
+                       ret = stream_resize(
+                               s, OSPF_MAX_PACKET_SIZE - OSPF_MAX_LSA_SIZE);
                }
 
                if (ret == OSPF_MAX_LSA_SIZE) {
@@ -519,9 +519,8 @@ static int lsa_link_broadcast_set(struct stream *s, struct ospf_interface *oi)
 
        dr = ospf_nbr_lookup_by_addr(oi->nbrs, &DR(oi));
        /* Describe Type 2 link. */
-       if (dr
-           && (dr->state == NSM_Full
-               || IPV4_ADDR_SAME(&oi->address->u.prefix4, &DR(oi)))
+       if (dr && (dr->state == NSM_Full
+                  || IPV4_ADDR_SAME(&oi->address->u.prefix4, &DR(oi)))
            && ospf_nbr_count(oi, NSM_Full) > 0) {
                if (IS_DEBUG_OSPF(lsa, LSA_GENERATE))
                        zlog_debug(
@@ -3418,7 +3417,7 @@ struct in_addr ospf_lsa_unique_id(struct ospf *ospf, struct ospf_lsdb *lsdb,
                        return id;
                }
                /* Masklen differs, then apply wildcard mask to Link State ID.
-                */
+                  */
                else {
                        masklen2ip(p->prefixlen, &mask);
 
index d1cc00b9136e2bc6d144f24aaafa1e5c39ad3acf..f284a04cbe5498a6ebf204066217252435bfb2ae 100644 (file)
@@ -55,9 +55,7 @@
 
 /* ospfd privileges */
 zebra_capabilities_t _caps_p[] = {
-       ZCAP_NET_RAW,
-       ZCAP_BIND,
-       ZCAP_NET_ADMIN,
+       ZCAP_NET_RAW, ZCAP_BIND, ZCAP_NET_ADMIN,
 };
 
 struct zebra_privs_t ospfd_privs = {
index a1e9533dbab8939c576c092127c72b0ff95fc6aa..33492cf7c9b91585acf4f9148c9138f75f51b25e 100644 (file)
@@ -460,8 +460,9 @@ struct ospf_neighbor *ospf_nbr_get(struct ospf_interface *oi,
 
        if (oi->type == OSPF_IFTYPE_VIRTUALLINK
            || oi->type == OSPF_IFTYPE_POINTOPOINT)
-               key.u.prefix4 = ospfh->router_id; /* index vlink and ptp nbrs by
-                                                    router-id */
+               key.u.prefix4 =
+                       ospfh->router_id; /* index vlink and ptp nbrs by
+                                            router-id */
        else
                key.u.prefix4 = iph->ip_src;
 
index 97f06afd6691e3780eb40cd0213f309d7a16e768..a2c40923b1d776d442b3f838890d9f0f195c2956 100644 (file)
@@ -1358,11 +1358,12 @@ void ospf_opaque_lsa_originate_schedule(struct ospf_interface *oi, int *delay0)
                         * list_isempty (oipt->id_list)
                         * not being empty.
                         */
-                       if (oipt->t_opaque_lsa_self
-                                   != NULL /* Waiting for a thread call. */
-                           || oipt->status == PROC_SUSPEND) /* Cannot
-                                                               originate
-                                                               now. */
+                       if (
+                               oipt->t_opaque_lsa_self
+                                       != NULL /* Waiting for a thread call. */
+                               || oipt->status == PROC_SUSPEND) /* Cannot
+                                                                   originate
+                                                                   now. */
                                continue;
 
                        ospf_opaque_lsa_reoriginate_schedule(
@@ -1383,11 +1384,12 @@ void ospf_opaque_lsa_originate_schedule(struct ospf_interface *oi, int *delay0)
                         * list_isempty (oipt->id_list)
                         * not being empty.
                         */
-                       if (oipt->t_opaque_lsa_self
-                                   != NULL /* Waiting for a thread call. */
-                           || oipt->status == PROC_SUSPEND) /* Cannot
-                                                               originate
-                                                               now. */
+                       if (
+                               oipt->t_opaque_lsa_self
+                                       != NULL /* Waiting for a thread call. */
+                               || oipt->status == PROC_SUSPEND) /* Cannot
+                                                                   originate
+                                                                   now. */
                                continue;
 
                        ospf_opaque_lsa_reoriginate_schedule(
@@ -1408,11 +1410,12 @@ void ospf_opaque_lsa_originate_schedule(struct ospf_interface *oi, int *delay0)
                         * list_isempty (oipt->id_list)
                         * not being empty.
                         */
-                       if (oipt->t_opaque_lsa_self
-                                   != NULL /* Waiting for a thread call. */
-                           || oipt->status == PROC_SUSPEND) /* Cannot
-                                                               originate
-                                                               now. */
+                       if (
+                               oipt->t_opaque_lsa_self
+                                       != NULL /* Waiting for a thread call. */
+                               || oipt->status == PROC_SUSPEND) /* Cannot
+                                                                   originate
+                                                                   now. */
                                continue;
 
                        ospf_opaque_lsa_reoriginate_schedule((void *)top,
index ee6623a05746ecfd286693d980f8530cd44a7121..ac2406ec2d363f5733d495e2b73359606ac6f10c 100644 (file)
@@ -643,9 +643,9 @@ static int ospf_write(struct thread *thread)
 #ifdef WANT_OSPF_WRITE_FRAGMENT
        static u_int16_t ipid = 0;
        u_int16_t maxdatasize;
-#endif  /* WANT_OSPF_WRITE_FRAGMENT */
-       /* $FRR indent$ */
-       /* clang-format off */
+#endif /* WANT_OSPF_WRITE_FRAGMENT */
+       /* $FRR indent$ */
+       /* clang-format off */
 #define OSPF_WRITE_IPHL_SHIFT 2
        int pkt_count = 0;
 
@@ -2436,15 +2436,15 @@ static int ospf_check_auth(struct ospf_interface *oi, struct ospf_header *ospfh)
                        return 0;
                }
                /* only MD5 crypto method can pass ospf_packet_examin() */
-               if (NULL
-                           == (ck = listgetdata(listtail(
-                                       OSPF_IF_PARAM(oi, auth_crypt))))
-                   || ospfh->u.crypt.key_id != ck->key_id ||
-                   /* Condition above uses the last key ID on the list,
-                      which is
-                      different from what ospf_crypt_key_lookup() does. A
-                      bug? */
-                   !ospf_check_md5_digest(oi, ospfh)) {
+               if (
+                       NULL == (ck = listgetdata(listtail(
+                                        OSPF_IF_PARAM(oi, auth_crypt))))
+                       || ospfh->u.crypt.key_id != ck->key_id ||
+                       /* Condition above uses the last key ID on the list,
+                          which is
+                          different from what ospf_crypt_key_lookup() does. A
+                          bug? */
+                       !ospf_check_md5_digest(oi, ospfh)) {
                        if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV))
                                zlog_warn("interface %s: MD5 auth failed",
                                          IF_NAME(oi));
@@ -2548,7 +2548,7 @@ static unsigned ospf_lsa_examin(struct lsa_header *lsah, const u_int16_t lsalen,
                                                              header, "flags",
                                                              0, "# links" */
                        ntohs(rlsa->links)                 /* 16 bits */
-               );
+                       );
                break;
        case OSPF_AS_EXTERNAL_LSA:
        /* RFC2328 A.4.5, LSA header + 4 bytes followed by N>=1 12-bytes long
@@ -2772,7 +2772,7 @@ static unsigned ospf_packet_examin(struct ospf_header *oh,
                        bytesdeclared - OSPF_HEADER_SIZE - OSPF_LS_UPD_MIN_SIZE,
                        0,                     /* full LSAs */
                        ntohl(lsupd->num_lsas) /* 32 bits */
-               );
+                       );
                break;
        case OSPF_MSG_LS_ACK:
                /* RFC2328 A.3.6, packet header followed by N>=0 header-only
@@ -2888,8 +2888,8 @@ int ospf_read(struct thread *thread)
 
        ospfh = (struct ospf_header *)STREAM_PNT(ibuf);
        if (MSG_OK
-           != ospf_packet_examin(ospfh, stream_get_endp(ibuf)
-                                                - stream_get_getp(ibuf)))
+           != ospf_packet_examin(
+                      ospfh, stream_get_endp(ibuf) - stream_get_getp(ibuf)))
                return -1;
        /* Now it is safe to access all fields of OSPF packet header. */
 
@@ -2935,9 +2935,8 @@ int ospf_read(struct thread *thread)
         * or header area is backbone but ospf_interface is not
         * check for VLINK interface
         */
-       if ((oi == NULL)
-           || (OSPF_IS_AREA_ID_BACKBONE(ospfh->area_id)
-               && !OSPF_IS_AREA_ID_BACKBONE(oi->area->area_id))) {
+       if ((oi == NULL) || (OSPF_IS_AREA_ID_BACKBONE(ospfh->area_id)
+                            && !OSPF_IS_AREA_ID_BACKBONE(oi->area->area_id))) {
                if ((oi = ospf_associate_packet_vl(ospf, ifp, iph, ospfh))
                    == NULL) {
                        if (!ospf->instance && IS_DEBUG_OSPF_EVENT)
index 020dfe9d4d9b464e8441e090eb67152c3e59e624..9c4dca2e2fbea2ed79e2c4dbc2000c9d920b6546 100644 (file)
@@ -229,16 +229,18 @@ static void ospf_route_delete_uniq(struct route_table *rt,
                            or->path_type == OSPF_PATH_INTER_AREA) {
                                if (or->type == OSPF_DESTINATION_NETWORK) {
                                        if (!ospf_route_exist_new_table(
-                                                   cmprt, (struct prefix_ipv4
-                                                                   *)&rn->p))
+                                                   cmprt,
+                                                   (struct prefix_ipv4 *)&rn
+                                                           ->p))
                                                ospf_zebra_delete(
                                                        (struct prefix_ipv4
                                                                 *)&rn->p,
                                                        or);
                                } else if (or->type == OSPF_DESTINATION_DISCARD)
                                        if (!ospf_route_exist_new_table(
-                                                   cmprt, (struct prefix_ipv4
-                                                                   *)&rn->p))
+                                                   cmprt,
+                                                   (struct prefix_ipv4 *)&rn
+                                                           ->p))
                                                ospf_zebra_delete_discard(
                                                        (struct prefix_ipv4
                                                                 *)&rn->p);
index 80fdbf2158778fbfe6535d8bfb43d738a4fa90fa..547e1e8f53ee5250ea027125b872b3375663954f 100644 (file)
@@ -332,9 +332,7 @@ static route_map_result_t route_match_tag(void *rule, struct prefix *prefix,
 
 /* Route map commands for tag matching. */
 static struct route_map_rule_cmd route_match_tag_cmd = {
-       "tag",
-       route_match_tag,
-       route_map_rule_tag_compile,
+       "tag", route_match_tag, route_map_rule_tag_compile,
        route_map_rule_tag_free,
 };
 
@@ -392,9 +390,7 @@ static void route_set_metric_free(void *rule)
 
 /* Set metric rule structure. */
 struct route_map_rule_cmd route_set_metric_cmd = {
-       "metric",
-       route_set_metric,
-       route_set_metric_compile,
+       "metric", route_set_metric, route_set_metric_compile,
        route_set_metric_free,
 };
 
@@ -446,9 +442,7 @@ static void route_set_metric_type_free(void *rule)
 
 /* Set metric rule structure. */
 struct route_map_rule_cmd route_set_metric_type_cmd = {
-       "metric-type",
-       route_set_metric_type,
-       route_set_metric_type_compile,
+       "metric-type", route_set_metric_type, route_set_metric_type_compile,
        route_set_metric_type_free,
 };
 
@@ -471,9 +465,7 @@ static route_map_result_t route_set_tag(void *rule, struct prefix *prefix,
 
 /* Route map commands for tag set. */
 static struct route_map_rule_cmd route_set_tag_cmd = {
-       "tag",
-       route_set_tag,
-       route_map_rule_tag_compile,
+       "tag", route_set_tag, route_map_rule_tag_compile,
        route_map_rule_tag_free,
 };
 
index a8b7027194639b4ed137bc617a4b296f6544a7e6..6a352380b8c8c6b1e430dbc4724d24d2a6b67ffa 100644 (file)
@@ -872,9 +872,7 @@ static u_char *ospfStubAreaEntry(struct variable *v, oid *name, size_t *length,
                return SNMP_INTEGER(SNMP_VALID);
                break;
        case OSPFSTUBMETRICTYPE: /* 5 */
-                                /* OSPF Metric type. */
-                                /* $FRR indent$ */
-                                /* clang-format off */
+/* OSPF Metric type. */
 #define OSPF_ospfMetric     1
 #define OSPF_comparableCost 2
 #define OSPF_nonComparable  3
@@ -2102,8 +2100,7 @@ static struct ospf_neighbor *ospf_snmp_nbr_lookup(struct ospf *ospf,
 
        for (ALL_LIST_ELEMENTS(ospf->oiflist, node, nnode, oi)) {
                for (rn = route_top(oi->nbrs); rn; rn = route_next(rn))
-                       if ((nbr = rn->info) != NULL
-                           && nbr != oi->nbr_self
+                       if ((nbr = rn->info) != NULL && nbr != oi->nbr_self
                            /* If EXACT match is needed, provide ALL entry found
                                        && nbr->state != NSM_Down
                             */
index b644c94ca4d0069a6caa7cb113e997a90c66b85f..a8bfb669af423e3a4a4da2d912fd018fb456375a 100644 (file)
@@ -290,9 +290,8 @@ static void ospf_passive_interface_default(struct ospf *ospf, u_char newval)
        ospf->passive_interface_default = newval;
 
        for (ALL_LIST_ELEMENTS_RO(om->iflist, ln, ifp)) {
-               if (ifp
-                   && OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(ifp),
-                                               passive_interface))
+               if (ifp && OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(ifp),
+                                                   passive_interface))
                        UNSET_IF_PARAM(IF_DEF_PARAMS(ifp), passive_interface);
        }
        for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, ln, oi)) {
@@ -395,9 +394,8 @@ DEFUN (ospf_passive_interface,
        for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
                struct ospf_interface *oi = rn->info;
 
-               if (oi
-                   && (OSPF_IF_PARAM(oi, passive_interface)
-                       == OSPF_IF_PASSIVE))
+               if (oi && (OSPF_IF_PARAM(oi, passive_interface)
+                          == OSPF_IF_PASSIVE))
                        ospf_if_set_multicast(oi);
        }
        /*
@@ -2127,8 +2125,7 @@ ALIAS(ospf_compatible_rfc1583, ospf_rfc1583_flag_cmd,
       "Enable the RFC1583Compatibility flag\n")
 
 ALIAS(no_ospf_compatible_rfc1583, no_ospf_rfc1583_flag_cmd,
-      "no ospf rfc1583compatibility",
-      NO_STR
+      "no ospf rfc1583compatibility", NO_STR
       "OSPF specific commands\n"
       "Disable the RFC1583Compatibility flag\n")
 
@@ -2582,8 +2579,7 @@ DEFUN (no_ospf_write_multiplier,
 }
 
 ALIAS(no_ospf_write_multiplier, no_write_multiplier_cmd,
-      "no write-multiplier (1-100)",
-      NO_STR
+      "no write-multiplier (1-100)", NO_STR
       "Write multiplier\n"
       "Maximum number of interface serviced per write\n")
 
@@ -3181,9 +3177,8 @@ static int show_ip_ospf_common(struct vty *vty, struct ospf *ospf,
 
        if (use_json) {
                json_object_object_add(json, "areas", json_areas);
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else
                vty_out(vty, "\n");
@@ -3327,10 +3322,10 @@ static void show_ip_ospf_interface_sub(struct vty *vty, struct ospf *ospf,
                                        dstr = "Broadcast";
 
                                /* For Vlinks, showing the peer address is
-                                * probably more
-                                *  *  *  *                * informative than
-                                * the local interface that is being used
-                                *   *   *   *                               */
+                  * probably more
+                  *  *  *  *                * informative than the local
+                  * interface that is being used
+                  *   *   *   *                               */
                                if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
                                        dest = &oi->vl_data->peer_addr;
                                else
@@ -3611,9 +3606,8 @@ static int show_ip_ospf_interface_common(struct vty *vty, struct ospf *ospf,
        }
 
        if (use_json) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else
                vty_out(vty, "\n");
@@ -3823,9 +3817,8 @@ static int show_ip_ospf_neighbor_common(struct vty *vty, struct ospf *ospf,
                show_ip_ospf_neighbor_sub(vty, oi, json, use_json);
 
        if (use_json) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else
                vty_out(vty, "\n");
@@ -3944,9 +3937,8 @@ static int show_ip_ospf_neighbor_all_common(struct vty *vty, struct ospf *ospf,
        }
 
        if (use_json) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else
                vty_out(vty, "\n");
@@ -4038,9 +4030,8 @@ static int show_ip_ospf_neighbor_int_common(struct vty *vty, struct ospf *ospf,
        }
 
        if (use_json) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else
                vty_out(vty, "\n");
@@ -4411,6 +4402,10 @@ static int show_ip_ospf_neighbor_id_common(struct vty *vty, struct ospf *ospf,
        if (!ret) {
                if (!use_json)
                        vty_out(vty, "Please specify Neighbor ID by A.B.C.D\n");
+               else {
+                       vty_out(vty, "{}\n");
+                       json_object_free(json);
+               }
                return CMD_WARNING;
        }
 
@@ -4422,9 +4417,8 @@ static int show_ip_ospf_neighbor_id_common(struct vty *vty, struct ospf *ospf,
        }
 
        if (use_json) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else
                vty_out(vty, "\n");
@@ -4512,9 +4506,8 @@ static int show_ip_ospf_neighbor_detail_common(struct vty *vty,
        }
 
        if (use_json) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else
                vty_out(vty, "\n");
@@ -4611,9 +4604,8 @@ static int show_ip_ospf_neighbor_detail_all_common(struct vty *vty,
        }
 
        if (use_json) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                vty_out(vty, "\n");
@@ -4694,6 +4686,10 @@ static int show_ip_ospf_neighbor_int_detail_common(struct vty *vty,
        if (!ifp) {
                if (!use_json)
                        vty_out(vty, "No such interface.\n");
+               else {
+                       vty_out(vty, "{}\n");
+                       json_object_free(json);
+               }
                return CMD_WARNING;
        }
 
@@ -4714,9 +4710,8 @@ static int show_ip_ospf_neighbor_int_detail_common(struct vty *vty,
        }
 
        if (use_json) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else
                vty_out(vty, "\n");
index e1c961491f48772905f8d8dc5892d49ae1ef8ea9..f68c252a3563120ab00461f20ee847b4fcb46f9f 100644 (file)
@@ -404,9 +404,9 @@ int pim_assert_build_msg(uint8_t *pim_msg, int buf_size, struct interface *ifp,
        }
 
        /* Metric preference */
-       pim_write_uint32(pim_msg_curr, rpt_bit_flag
-                                              ? metric_preference | 0x80000000
-                                              : metric_preference);
+       pim_write_uint32(pim_msg_curr,
+                        rpt_bit_flag ? metric_preference | 0x80000000
+                                     : metric_preference);
        pim_msg_curr += 4;
 
        /* Route metric */
index 07678159d0f72b9bb8058be4df5e663ba614dc98..1c9fe40c299f7d76612342362cf7049c685bbc54 100644 (file)
@@ -423,9 +423,8 @@ static void pim_show_membership(struct vty *vty, u_char uj)
        } /* scan interface channels */
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
        } else {
                vty_out(vty,
                        "Interface  Address          Source           Group            Membership\n");
@@ -589,9 +588,8 @@ static void igmp_show_interfaces(struct vty *vty, u_char uj)
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -786,9 +784,8 @@ static void igmp_show_interfaces_single(struct vty *vty, const char *ifname,
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                if (!found_ifname)
@@ -1168,8 +1165,9 @@ static void pim_show_interfaces_single(struct vty *vty, const char *ifname,
                        print_header = 1;
                        for (ALL_LIST_ELEMENTS_RO(pim_upstream_list, upnode,
                                                  up)) {
-                               if (strcmp(ifp->name, up->rpf.source_nexthop
-                                                             .interface->name)
+                               if (strcmp(ifp->name,
+                                          up->rpf.source_nexthop
+                                                  .interface->name)
                                    == 0) {
                                        if (up->flags
                                            & PIM_UPSTREAM_FLAG_MASK_FHR) {
@@ -1256,9 +1254,8 @@ static void pim_show_interfaces_single(struct vty *vty, const char *ifname,
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                if (!found_ifname)
@@ -1317,9 +1314,8 @@ static void pim_show_interfaces(struct vty *vty, u_char uj)
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
        } else {
                vty_out(vty,
                        "Interface  State          Address  PIM Nbrs           PIM DR  FHR IfChannels\n");
@@ -1436,9 +1432,8 @@ static void pim_show_interface_traffic(struct vty *vty, u_char uj)
                }
        }
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -1523,9 +1518,8 @@ static void pim_show_interface_traffic_single(struct vty *vty,
                }
        }
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                if (!found_ifname)
@@ -1628,9 +1622,8 @@ static void pim_show_join(struct vty *vty, u_char uj)
        } /* scan interface channels */
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -1833,9 +1826,8 @@ static void pim_show_neighbors_single(struct vty *vty, const char *neighbor,
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                {
@@ -2039,9 +2031,8 @@ static void pim_show_state(struct vty *vty, const char *src_or_group,
 
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                vty_out(vty, "\n");
@@ -2124,9 +2115,8 @@ static void pim_show_neighbors(struct vty *vty, u_char uj)
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -2356,9 +2346,8 @@ static void pim_show_upstream(struct vty *vty, u_char uj)
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -2442,9 +2431,8 @@ static void pim_show_join_desired(struct vty *vty, u_char uj)
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -2481,10 +2469,7 @@ static void pim_show_upstream_rpf(struct vty *vty, u_char uj)
                pim_addr_dump("<rpf?>", &rpf->rpf_addr, rpf_addr_str,
                              sizeof(rpf_addr_str));
 
-               rpf_ifname =
-                       rpf->source_nexthop.interface ? rpf->source_nexthop
-                                                               .interface->name
-                                                     : "<ifname?>";
+               rpf_ifname = rpf->source_nexthop.interface ? rpf->source_nexthop.interface->name : "<ifname?>";
 
                if (uj) {
                        json_object_object_get_ex(json, grp_str, &json_group);
@@ -2514,9 +2499,8 @@ static void pim_show_upstream_rpf(struct vty *vty, u_char uj)
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -2620,10 +2604,7 @@ static void pim_show_rpf(struct vty *vty, u_char uj)
                              &rpf->source_nexthop.mrib_nexthop_addr,
                              rib_nexthop_str, sizeof(rib_nexthop_str));
 
-               rpf_ifname =
-                       rpf->source_nexthop.interface ? rpf->source_nexthop
-                                                               .interface->name
-                                                     : "<ifname?>";
+               rpf_ifname = rpf->source_nexthop.interface ? rpf->source_nexthop.interface->name : "<ifname?>";
 
                if (uj) {
                        json_object_object_get_ex(json, grp_str, &json_group);
@@ -2661,9 +2642,8 @@ static void pim_show_rpf(struct vty *vty, u_char uj)
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -2822,9 +2802,8 @@ static void igmp_show_groups(struct vty *vty, u_char uj)
        }                 /* scan interfaces */
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -4060,9 +4039,8 @@ static void show_mroute(struct vty *vty, u_char uj)
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -4655,9 +4633,8 @@ static void ip_pim_ssm_show_group_range(struct vty *vty, u_char uj)
                json_object *json;
                json = json_object_new_object();
                json_object_string_add(json, "ssmGroups", range_str);
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else
                vty_out(vty, "SSM group range : %s\n", range_str);
@@ -4699,9 +4676,8 @@ static void ip_pim_ssm_show_group_type(struct vty *vty, u_char uj,
                json_object *json;
                json = json_object_new_object();
                json_object_string_add(json, "groupType", type_str);
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else
                vty_out(vty, "Group type : %s\n", type_str);
@@ -6453,8 +6429,7 @@ DEFUN (ip_pim_bfd_param,
 }
 
 ALIAS(no_ip_pim_bfd, no_ip_pim_bfd_param_cmd,
-      "no ip pim bfd (2-255) (50-60000) (50-60000)",
-      NO_STR IP_STR PIM_STR
+      "no ip pim bfd (2-255) (50-60000) (50-60000)", NO_STR IP_STR PIM_STR
       "Enables BFD support\n"
       "Detect Multiplier\n"
       "Required min receive interval\n"
@@ -6815,9 +6790,8 @@ static void ip_msdp_show_mesh_group(struct vty *vty, u_char uj)
 
        if (uj) {
                json_object_object_add(json, mg->mesh_group_name, json_mg_row);
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -6884,9 +6858,8 @@ static void ip_msdp_show_peers(struct vty *vty, u_char uj)
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -6990,9 +6963,8 @@ static void ip_msdp_show_peers_detail(struct vty *vty, const char *peer,
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -7089,9 +7061,8 @@ static void ip_msdp_show_sa(struct vty *vty, u_char uj)
 
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -7182,9 +7153,8 @@ static void ip_msdp_show_sa_detail(struct vty *vty, u_char uj)
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -7227,9 +7197,8 @@ static void ip_msdp_show_sa_addr(struct vty *vty, const char *addr, u_char uj)
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
@@ -7257,9 +7226,8 @@ static void ip_msdp_show_sa_sg(struct vty *vty, const char *src,
        }
 
        if (uj) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
index 5165f7890642f6852ef4a7bb06668a0d106d1e96..e742e68f6783011f0db2d833b6a38915ea524be9 100644 (file)
@@ -78,9 +78,10 @@ struct pim_interface {
        struct in_addr update_source;   /* user can statically set the primary
                                         * address of the interface */
 
-       int igmp_version;                      /* IGMP version */
-       int igmp_default_robustness_variable;  /* IGMPv3 QRV */
-       int igmp_default_query_interval;       /* IGMPv3 secs between general
+       int igmp_version;                     /* IGMP version */
+       int igmp_default_robustness_variable; /* IGMPv3 QRV */
+       int
+               igmp_default_query_interval;   /* IGMPv3 secs between general
                                                  queries */
        int igmp_query_max_response_time_dsec; /* IGMPv3 Max Response Time in
                                                  dsecs for general queries */
index cd9da1f53650afa5c1437198bd87ed4e430d1ffb..d4916518e74029afede254faa673ce2ece698ed9 100644 (file)
@@ -814,9 +814,8 @@ void pim_ifchannel_join_add(struct interface *ifp, struct in_addr neigh_addr,
                /*
                 * If we are going to be a LHR, we need to note it
                 */
-               if (ch->upstream->parent
-                   && (ch->upstream->parent->flags
-                       & PIM_UPSTREAM_FLAG_MASK_SRC_IGMP)
+               if (ch->upstream->parent && (ch->upstream->parent->flags
+                                            & PIM_UPSTREAM_FLAG_MASK_SRC_IGMP)
                    && !(ch->upstream->flags
                         & PIM_UPSTREAM_FLAG_MASK_SRC_LHR)) {
                        pim_upstream_ref(ch->upstream,
index ecaafaa587f8afd59e4ae4db04fc83ce9fff6a4f..b8e6d8ad3db41d6da1d21e03992fa972b6021d2c 100644 (file)
@@ -53,10 +53,7 @@ struct option longopts[] = {{0}};
 
 /* pimd privileges */
 zebra_capabilities_t _caps_p[] = {
-       ZCAP_NET_ADMIN,
-       ZCAP_SYS_ADMIN,
-       ZCAP_NET_RAW,
-       ZCAP_BIND,
+       ZCAP_NET_ADMIN, ZCAP_SYS_ADMIN, ZCAP_NET_RAW, ZCAP_BIND,
 };
 
 /* pimd privileges to run with */
index 648bc1d5b526e38619352d2686dcc76c5c65f81e..0f653e70a4310d2887bc2bef686fb99097e5ff30 100644 (file)
@@ -793,10 +793,10 @@ static void pim_msdp_peer_listen(struct pim_msdp_peer *mp)
        }
 
        /* this is interntionally asymmetric i.e. we set up listen-socket when
-        * the
-        * first listening peer is configured; but don't bother tearing it down
-        * when
-        * all the peers go down */
+       * the
+       * first listening peer is configured; but don't bother tearing it down
+       * when
+       * all the peers go down */
        pim_msdp_sock_listen();
 }
 
index 971994136213726d5d1fd3a4371598bea54ea65f..66e5457df443710243210e1cb6723ab07e660498 100644 (file)
@@ -69,7 +69,7 @@ enum pim_msdp_sa_flags {
        PIM_MSDP_SAF_PEER = (1 << 1),
        PIM_MSDP_SAF_REF = (PIM_MSDP_SAF_LOCAL | PIM_MSDP_SAF_PEER),
        PIM_MSDP_SAF_STALE = (1 << 2), /* local entries can get kicked out on
-                                       * misc pim events such as RP change */
+                                      * misc pim events such as RP change */
        PIM_MSDP_SAF_UP_DEL_IN_PROG = (1 << 3)
 };
 
@@ -116,13 +116,13 @@ struct pim_msdp_peer {
 #define PIM_MSDP_PEER_HOLD_TIME 75
        struct thread *hold_timer; // 5.4
                                   /* $FRR indent$ */
-                                  /* clang-format off */
+/* clang-format off */
 #define PIM_MSDP_PEER_KA_TIME 60
-       struct thread *ka_timer;   // 5.5
-                                  /* $FRR indent$ */
-                                  /* clang-format off */
+       struct thread *ka_timer; // 5.5
+                                /* $FRR indent$ */
+                                /* clang-format off */
 #define PIM_MSDP_PEER_CONNECT_RETRY_TIME 30
-       struct thread *cr_timer;   // 5.6
+       struct thread *cr_timer; // 5.6
 
        /* packet thread and buffers */
        uint32_t packet_size;
index 2210a91f98063591479c8a18c0b687f738b5422f..1cbe1dcf7ff00e78ccf866ccc639f838a36f6ed3 100644 (file)
@@ -330,9 +330,8 @@ int pim_register_recv(struct interface *ifp, struct in_addr dest_addr,
                        pim_str_sg_dump(&sg), src_str, ifp->name, i_am_rp);
        }
 
-       if (i_am_rp
-           && (dest_addr.s_addr
-               == ((RP(sg.grp))->rpf_addr.u.prefix4.s_addr))) {
+       if (i_am_rp && (dest_addr.s_addr
+                       == ((RP(sg.grp))->rpf_addr.u.prefix4.s_addr))) {
                sentRegisterStop = 0;
 
                if (*bits & PIM_REGISTER_BORDER_BIT) {
index 4c5722e3539621a64a33563d689ae4c99ecdbf40..2fe0143a87ef23443e0af6da7202babd9fa9bd8e 100644 (file)
@@ -948,9 +948,8 @@ void pim_rp_show_information(struct vty *vty, u_char uj)
                                inet_ntoa(prev_rp_info->rp.rpf_addr.u.prefix4),
                                json_rp_rows);
 
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 }
index 5258377cca5082f9aa5e558d227e326427fd4dac..027b18e123bac6f5f0dd9bfed31f74c4ba140e00 100644 (file)
@@ -435,8 +435,9 @@ int zclient_lookup_nexthop(struct pim_zlookup_nexthop nexthop_tab[],
                                nexthop_tab[0].route_metric);
                }
 
-               addr = nexthop_addr.u.prefix4; /* use nexthop addr for
-                                                 recursive lookup */
+               addr =
+                       nexthop_addr.u.prefix4; /* use nexthop addr for
+                                                  recursive lookup */
 
        } /* for (max_lookup) */
 
index fd55592f88976396568325a8849fc1590094b2d4..c9022af713977f2477bc424b0115696f6c408d78 100644 (file)
@@ -74,6 +74,7 @@ static inline void qpb_free(qpb_allocator_t *allocator, void *ptr)
  */
 #define QPB_ALLOC(allocator, type) (type *)qpb_alloc(allocator, sizeof(type))
 
+
 /*
  * Externs.
  */
index cf01e4c6e3291a9b3452c1498f329d4d4d1054f4..a62647b258756aea0afd72f088a776affd6cd5f2 100755 (executable)
@@ -515,6 +515,18 @@ case "$1" in
         if [ -z "$dmn" -o "$dmn" = "zebra" ]; then
             echo "Removing all routes made by zebra."
             ip route flush proto zebra
+            # At least in CentOS/RHEL 6, iproute2 doesn't know
+            # about the new protocol names, so we have to flush them
+            # by number (it also doesn't support rt_protos.d
+            ip route flush proto 186
+            ip route flush proto 187
+            ip route flush proto 188
+            ip route flush proto 189
+            ip route flush proto 190
+            ip route flush proto 191
+            ip route flush proto 192
+            ip route flush proto 193
+            ip route flush proto 194
         else
             [ -n "$dmn" ] && eval "${dmn/-/_}=0"
             start_watchfrr
index b2c80817dda77c2804f8328820a3bdd0f5413fd1..492d036991b9ece51d21a6cda35b7d34b9e0d39f 100644 (file)
@@ -66,7 +66,7 @@ DEFUN (debug_rip_events,
        "RIP events\n")
 {
        rip_debug_event = RIP_DEBUG_EVENT;
-       return CMD_WARNING_CONFIG_FAILED;
+       return CMD_SUCCESS;
 }
 
 DEFUN (debug_rip_packet,
@@ -112,7 +112,7 @@ DEFUN (debug_rip_zebra,
        "RIP and ZEBRA communication\n")
 {
        rip_debug_zebra = RIP_DEBUG_ZEBRA;
-       return CMD_WARNING_CONFIG_FAILED;
+       return CMD_SUCCESS;
 }
 
 DEFUN (no_debug_rip_events,
@@ -177,7 +177,7 @@ DEFUN (no_debug_rip_zebra,
        "RIP and ZEBRA communication\n")
 {
        rip_debug_zebra = 0;
-       return CMD_WARNING_CONFIG_FAILED;
+       return CMD_SUCCESS;
 }
 
 /* Debug node. */
index 3dc54a6617b8beec67993d94f31659521434e030..a1704711230dc01b31b5b7ed1e9fa7f7cece36a7 100644 (file)
@@ -1855,9 +1855,7 @@ int config_write_rip_network(struct vty *vty, int config_mode)
 }
 
 static struct cmd_node interface_node = {
-       INTERFACE_NODE,
-       "%s(config-if)# ",
-       1,
+       INTERFACE_NODE, "%s(config-if)# ", 1,
 };
 
 /* Called when interface structure allocated. */
index 546efb2dadae6861eb0266f476f7add18852b6ff..7255df5e67848f1fb94f5ead512591df5ab8f2ee 100644 (file)
@@ -347,9 +347,7 @@ static route_map_result_t route_match_tag(void *rule, struct prefix *prefix,
 
 /* Route map commands for tag matching. */
 static struct route_map_rule_cmd route_match_tag_cmd = {
-       "tag",
-       route_match_tag,
-       route_map_rule_tag_compile,
+       "tag", route_match_tag, route_map_rule_tag_compile,
        route_map_rule_tag_free,
 };
 
@@ -438,9 +436,7 @@ static void route_set_metric_free(void *rule)
 
 /* Set metric rule structure. */
 static struct route_map_rule_cmd route_set_metric_cmd = {
-       "metric",
-       route_set_metric,
-       route_set_metric_compile,
+       "metric", route_set_metric, route_set_metric_compile,
        route_set_metric_free,
 };
 
index 79d4324ea184764056d6b284de78dc7c376ebc92..961a846db23f82d38db79872357694aabfc9a6e1 100644 (file)
@@ -661,8 +661,7 @@ int config_write_rip_redistribute(struct vty *vty, int config_mode)
 
 /* Zebra node structure. */
 static struct cmd_node zebra_node = {
-       ZEBRA_NODE,
-       "%s(config-router)# ",
+       ZEBRA_NODE, "%s(config-router)# ",
 };
 
 static void rip_zebra_connected(struct zclient *zclient)
index eb6c8f743a2711eb64de2ad72b8b082d0ff3a769..d9b38bba89384a043482ff4acf86752426bd8e0b 100644 (file)
@@ -454,8 +454,9 @@ static void rip_rte_process(struct rte *rte, struct sockaddr_in *from,
                /* Get back the object */
                rte->nexthop = newinfo.nexthop_out;
                rte->tag = htons(newinfo.tag_out); /* XXX */
-               rte->metric = newinfo.metric_out;  /* XXX: the routemap uses the
-                                                     metric_out field */
+               rte->metric =
+                       newinfo.metric_out; /* XXX: the routemap uses the
+                                              metric_out field */
        }
 
        /* Once the entry has been validated, update the metric by
index 5d7a2cf9ff8d6bda310dc5dfd3459d46e4ef08c6..d56161d39e19aff0f88f3ecef78280f9637ee7a0 100644 (file)
@@ -67,7 +67,7 @@ DEFUN (debug_ripng_events,
        "Debug option set for ripng events\n")
 {
        ripng_debug_event = RIPNG_DEBUG_EVENT;
-       return CMD_WARNING_CONFIG_FAILED;
+       return CMD_SUCCESS;
 }
 
 DEFUN (debug_ripng_packet,
@@ -114,7 +114,7 @@ DEFUN (debug_ripng_zebra,
        "Debug option set for ripng and zebra communication\n")
 {
        ripng_debug_zebra = RIPNG_DEBUG_ZEBRA;
-       return CMD_WARNING_CONFIG_FAILED;
+       return CMD_SUCCESS;
 }
 
 DEFUN (no_debug_ripng_events,
@@ -179,7 +179,7 @@ DEFUN (no_debug_ripng_zebra,
        "Debug option set for ripng and zebra communication\n")
 {
        ripng_debug_zebra = 0;
-       return CMD_WARNING_CONFIG_FAILED;
+       return CMD_SUCCESS;
 }
 
 /* Debug node. */
index 0696d61ac03cf97dee1d39fe8b9344d2e8ceb268..3080801fb3537db541946a05f757e08fed8c5908 100644 (file)
@@ -150,9 +150,7 @@ static route_map_result_t route_match_tag(void *rule, struct prefix *prefix,
 }
 
 static struct route_map_rule_cmd route_match_tag_cmd = {
-       "tag",
-       route_match_tag,
-       route_map_rule_tag_compile,
+       "tag", route_match_tag, route_map_rule_tag_compile,
        route_map_rule_tag_free,
 };
 
@@ -242,9 +240,7 @@ static void route_set_metric_free(void *rule)
 }
 
 static struct route_map_rule_cmd route_set_metric_cmd = {
-       "metric",
-       route_set_metric,
-       route_set_metric_compile,
+       "metric", route_set_metric, route_set_metric_compile,
        route_set_metric_free,
 };
 
index 709a285ab5ab52a8af605e34b0d0a184705dfc66..386bee43b8cb6caf6b6acb7f27ad7b22690729bb 100644 (file)
@@ -507,8 +507,7 @@ static int zebra_config_write(struct vty *vty)
 
 /* Zebra node structure. */
 static struct cmd_node zebra_node = {
-       ZEBRA_NODE,
-       "%s(config-router)# ",
+       ZEBRA_NODE, "%s(config-router)# ",
 };
 
 static void ripng_zebra_connected(struct zclient *zclient)
index 874c42e7e8f1a9b9c4ded651f3b90f69cce4e4af..2883698f47b8bf59915dc11d7ebbcf9a5bfa5ee0 100644 (file)
@@ -742,8 +742,9 @@ static void ripng_route_process(struct rte *rte, struct sockaddr_in6 *from,
                        }
                }
                rte->tag = htons(newinfo.tag_out); /* XXX */
-               rte->metric = newinfo.metric_out;  /* XXX: the routemap uses the
-                                                     metric_out field */
+               rte->metric =
+                       newinfo.metric_out; /* XXX: the routemap uses the
+                                              metric_out field */
        }
 
        /* Once the entry has been validated, update the metric by
@@ -2717,9 +2718,7 @@ static int ripng_config_write(struct vty *vty)
 
 /* RIPng node structure. */
 static struct cmd_node cmd_ripng_node = {
-       RIPNG_NODE,
-       "%s(config-router)# ",
-       1,
+       RIPNG_NODE, "%s(config-router)# ", 1,
 };
 
 static void ripng_distribute_update(struct distribute *dist)
index 706825681b1e5bd6c2312ca27df0c97df2b7d012..46462d79c40caf90f272a7907658a5d73ed5f50d 100644 (file)
@@ -50,10 +50,8 @@ struct test_spec {
                                               deleted */
        const unsigned int hops;            /* aspath_count_hops result */
        const unsigned int confeds;      /* aspath_count_confeds */
-       const int private_as;   /* whether the private_as check should pass or
-                                  fail */
-                               /* $FRR indent$ */
-                               /* clang-format off */
+       const int private_as; /* whether the private_as check should pass or
+                                fail */
 #define NOT_ALL_PRIVATE 0
 #define ALL_PRIVATE 1
        const as_t does_loop;   /* an ASN which should trigger loop-check */
@@ -87,14 +85,7 @@ static struct test_segment {
                {0x2, 0x1, 0x22, 0x12, 0x2, 0x1, 0x00, 0x04},
                8,
                {
-                       "8722 4",
-                       "8722 4",
-                       2,
-                       0,
-                       NOT_ALL_PRIVATE,
-                       4,
-                       5,
-                       8722,
+                       "8722 4", "8722 4", 2, 0, NOT_ALL_PRIVATE, 4, 5, 8722,
                },
        },
        {
@@ -407,22 +398,8 @@ static struct test_segment {
                "reconcile_start_trans",
                "seq(23456,23456,23456) seq(6435,59408,21665)",
                {
-                       0x2,
-                       0x3,
-                       0x5b,
-                       0xa0,
-                       0x5b,
-                       0xa0,
-                       0x5b,
-                       0xa0,
-                       0x2,
-                       0x3,
-                       0x19,
-                       0x23,
-                       0xe8,
-                       0x10,
-                       0x54,
-                       0xa1,
+                       0x2, 0x3, 0x5b, 0xa0, 0x5b, 0xa0, 0x5b, 0xa0, 0x2, 0x3,
+                       0x19, 0x23, 0xe8, 0x10, 0x54, 0xa1,
                },
                16,
                {"23456 23456 23456 6435 59408 21665",
@@ -434,22 +411,8 @@ static struct test_segment {
                "reconcile_start_trans4",
                "seq(1842,41591,51793) seq(6435,59408,21665)",
                {
-                       0x2,
-                       0x3,
-                       0x07,
-                       0x32,
-                       0xa2,
-                       0x77,
-                       0xca,
-                       0x51,
-                       0x2,
-                       0x3,
-                       0x19,
-                       0x23,
-                       0xe8,
-                       0x10,
-                       0x54,
-                       0xa1,
+                       0x2, 0x3, 0x07, 0x32, 0xa2, 0x77, 0xca, 0x51, 0x2, 0x3,
+                       0x19, 0x23, 0xe8, 0x10, 0x54, 0xa1,
                },
                16,
                {"1842 41591 51793 6435 59408 21665",
@@ -461,20 +424,8 @@ static struct test_segment {
                "reconcile_start_trans_error",
                "seq(23456,23456,23456) seq(6435,59408)",
                {
-                       0x2,
-                       0x3,
-                       0x5b,
-                       0xa0,
-                       0x5b,
-                       0xa0,
-                       0x5b,
-                       0xa0,
-                       0x2,
-                       0x2,
-                       0x19,
-                       0x23,
-                       0xe8,
-                       0x10,
+                       0x2, 0x3, 0x5b, 0xa0, 0x5b, 0xa0, 0x5b, 0xa0, 0x2, 0x2,
+                       0x19, 0x23, 0xe8, 0x10,
                },
                14,
                {"23456 23456 23456 6435 59408", "23456 23456 23456 6435 59408",
@@ -552,10 +503,7 @@ static struct aspath_tests {
                0,
                0,
                {
-                       COMMON_ATTRS,
-                       BGP_ATTR_FLAG_TRANS,
-                       BGP_ATTR_AS_PATH,
-                       10,
+                       COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 10,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -568,10 +516,7 @@ static struct aspath_tests {
                -1,
                0,
                {
-                       COMMON_ATTRS,
-                       BGP_ATTR_FLAG_TRANS,
-                       BGP_ATTR_AS_PATH,
-                       8,
+                       COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 8,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -584,10 +529,7 @@ static struct aspath_tests {
                -1,
                0,
                {
-                       COMMON_ATTRS,
-                       BGP_ATTR_FLAG_TRANS,
-                       BGP_ATTR_AS_PATH,
-                       12,
+                       COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 12,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -602,8 +544,7 @@ static struct aspath_tests {
                {
                        COMMON_ATTRS,
                        BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
-                       BGP_ATTR_AS_PATH,
-                       10,
+                       BGP_ATTR_AS_PATH, 10,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -618,8 +559,7 @@ static struct aspath_tests {
                {
                        COMMON_ATTRS,
                        BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
-                       BGP_ATTR_AS4_PATH,
-                       10,
+                       BGP_ATTR_AS4_PATH, 10,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -634,8 +574,7 @@ static struct aspath_tests {
                {
                        COMMON_ATTRS,
                        BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
-                       BGP_ATTR_AS4_PATH,
-                       10,
+                       BGP_ATTR_AS4_PATH, 10,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -648,10 +587,7 @@ static struct aspath_tests {
                0,
                PEER_CAP_AS4_RCV | PEER_CAP_AS4_ADV,
                {
-                       COMMON_ATTRS,
-                       BGP_ATTR_FLAG_TRANS,
-                       BGP_ATTR_AS_PATH,
-                       18,
+                       COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 18,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -664,10 +600,7 @@ static struct aspath_tests {
                -1,
                PEER_CAP_AS4_RCV | PEER_CAP_AS4_ADV,
                {
-                       COMMON_ATTRS,
-                       BGP_ATTR_FLAG_TRANS,
-                       BGP_ATTR_AS_PATH,
-                       16,
+                       COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 16,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -680,10 +613,7 @@ static struct aspath_tests {
                -1,
                PEER_CAP_AS4_RCV | PEER_CAP_AS4_ADV,
                {
-                       COMMON_ATTRS,
-                       BGP_ATTR_FLAG_TRANS,
-                       BGP_ATTR_AS_PATH,
-                       20,
+                       COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 20,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -696,10 +626,7 @@ static struct aspath_tests {
                -1,
                PEER_CAP_AS4_RCV | PEER_CAP_AS4_ADV,
                {
-                       COMMON_ATTRS,
-                       BGP_ATTR_FLAG_TRANS,
-                       BGP_ATTR_AS_PATH,
-                       22,
+                       COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 22,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -714,8 +641,7 @@ static struct aspath_tests {
                {
                        COMMON_ATTRS,
                        BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
-                       BGP_ATTR_AS_PATH,
-                       18,
+                       BGP_ATTR_AS_PATH, 18,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -730,8 +656,7 @@ static struct aspath_tests {
                {
                        COMMON_ATTRS,
                        BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
-                       BGP_ATTR_AS4_PATH,
-                       14,
+                       BGP_ATTR_AS4_PATH, 14,
                },
                COMMON_ATTR_SIZE + 3,
        },
@@ -746,8 +671,7 @@ static struct aspath_tests {
                {
                        COMMON_ATTRS,
                        BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
-                       BGP_ATTR_AS4_PATH,
-                       14,
+                       BGP_ATTR_AS4_PATH, 14,
                },
                COMMON_ATTR_SIZE + 3,
                &test_segments[0],
@@ -880,13 +804,7 @@ static struct tests {
        {NULL,
         NULL,
         {
-                NULL,
-                0,
-                0,
-                0,
-                0,
-                0,
-                0,
+                NULL, 0, 0, 0, 0, 0, 0,
         }},
 };
 
@@ -934,13 +852,7 @@ struct tests reconcile_tests[] = {
        {NULL,
         NULL,
         {
-                NULL,
-                0,
-                0,
-                0,
-                0,
-                0,
-                0,
+                NULL, 0, 0, 0, 0, 0, 0,
         }},
 };
 
index 2b515b0f78863c189039da0eac5d8876e177e812..9ec2b5df19698aa07beb2c2236776723bea8062f 100644 (file)
@@ -216,387 +216,439 @@ static struct test_segment mp_segments[] = {
        },
        {NULL, NULL, {0}, 0, 0}};
 
-static struct test_segment misc_segments[] = {
-       /* 13 */
+static struct test_segment misc_segments[] =
        {
-               "ORF",
-               "ORF, simple, single entry, single tuple",
-               {/* hdr */ CAPABILITY_CODE_ORF, 0x7,
-                /* mpc */ 0x0, 0x1, 0x0, 0x1,
-                /* num */ 0x1,
-                /* tuples */ 0x40, 0x3},
-               9,
-               SHOULD_PARSE,
-       },
-       /* 14 */
-       {
-               "ORF-many",
-               "ORF, multi entry/tuple",
+               /* 13 */
                {
-                       /* hdr */ CAPABILITY_CODE_ORF,
-                       0x21,
-                       /* mpc */ 0x0,
-                       0x1,
-                       0x0,
-                       0x1,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40,
-                       ORF_MODE_BOTH,
-                       0x80,
-                       ORF_MODE_RECEIVE,
-                       0x80,
-                       ORF_MODE_SEND,
-                       /* mpc */ 0x0,
-                       0x2,
-                       0x0,
-                       0x1,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40,
-                       ORF_MODE_BOTH,
-                       0x80,
-                       ORF_MODE_RECEIVE,
-                       0x80,
-                       ORF_MODE_SEND,
-                       /* mpc */ 0x0,
-                       0x2,
-                       0x0,
-                       0x2,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40,
-                       ORF_MODE_RECEIVE,
-                       0x80,
-                       ORF_MODE_SEND,
-                       0x80,
-                       ORF_MODE_BOTH,
+                       "ORF",
+                       "ORF, simple, single entry, single tuple",
+                       {/* hdr */ CAPABILITY_CODE_ORF, 0x7,
+                        /* mpc */ 0x0, 0x1, 0x0, 0x1,
+                        /* num */ 0x1,
+                        /* tuples */ 0x40, 0x3},
+                       9,
+                       SHOULD_PARSE,
                },
-               35,
-               SHOULD_PARSE,
-       },
-       /* 15 */
-       {
-               "ORFlo",
-               "ORF, multi entry/tuple, hdr length too short",
+               /* 14 */
                {
-                       /* hdr */ CAPABILITY_CODE_ORF,
-                       0x15,
-                       /* mpc */ 0x0,
-                       0x1,
-                       0x0,
-                       0x1,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40,
-                       0x3,
-                       0x80,
-                       0x1,
-                       0x80,
-                       0x2,
-                       /* mpc */ 0x0,
-                       0x1,
-                       0x0,
-                       0x1,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40,
-                       0x3,
-                       0x80,
-                       0x1,
-                       0x80,
-                       0x2,
-                       /* mpc */ 0x0,
-                       0x2,
-                       0x0,
-                       0x2,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40,
-                       0x3,
-                       0x80,
-                       0x1,
-                       0x80,
-                       0x2,
+                       "ORF-many",
+                       "ORF, multi entry/tuple",
+                       {
+                               /* hdr */ CAPABILITY_CODE_ORF,
+                               0x21,
+                               /* mpc */ 0x0,
+                               0x1,
+                               0x0,
+                               0x1,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               ORF_MODE_BOTH,
+                               0x80,
+                               ORF_MODE_RECEIVE,
+                               0x80,
+                               ORF_MODE_SEND,
+                               /* mpc */ 0x0,
+                               0x2,
+                               0x0,
+                               0x1,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               ORF_MODE_BOTH,
+                               0x80,
+                               ORF_MODE_RECEIVE,
+                               0x80,
+                               ORF_MODE_SEND,
+                               /* mpc */ 0x0,
+                               0x2,
+                               0x0,
+                               0x2,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               ORF_MODE_RECEIVE,
+                               0x80,
+                               ORF_MODE_SEND,
+                               0x80,
+                               ORF_MODE_BOTH,
+                       },
+                       35,
+                       SHOULD_PARSE,
                },
-               35,
-               SHOULD_ERR, /* It should error on invalid
-                              Route-Refresh.. */
-       },
-       /* 16 */
-       {"ORFlu",
-        "ORF, multi entry/tuple, length too long",
-        {
-                /* hdr */ 0x3,     0x22,
-                /* mpc */ 0x0,     0x1,  0x0,  0x1,
-                /* num */ 0x3,
-                /* tuples */ 0x40, 0x3,  0x80, 0x1, 0x80, 0x2,
-                /* mpc */ 0x0,     0x2,  0x0,  0x1,
-                /* num */ 0x3,
-                /* tuples */ 0x40, 0x3,  0x80, 0x1, 0x80, 0x2,
-                /* mpc */ 0x0,     0x2,  0x0,  0x2,
-                /* num */ 0x3,
-                /* tuples */ 0x40, 0x3,  0x80, 0x1, 0x80, 0x2,
-        },
-        35,
-        SHOULD_ERR},
-       /* 17 */
-       {
-               "ORFnu",
-               "ORF, multi entry/tuple, entry number too long",
+               /* 15 */
                {
-                       /* hdr */ 0x3,     0x21,
-                       /* mpc */ 0x0,     0x1,  0x0,  0x1,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40, 0x3,  0x80, 0x1, 0x80, 0x2,
-                       /* mpc */ 0x0,     0x2,  0x0,  0x1,
-                       /* num */ 0x4,
-                       /* tuples */ 0x40, 0x3,  0x80, 0x1, 0x80, 0x2,
-                       /* mpc */ 0x0,     0x2,  0x0,  0x2,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40, 0x3,  0x80, 0x1, 0x80, 0x2,
+                       "ORFlo",
+                       "ORF, multi entry/tuple, hdr length too short",
+                       {
+                               /* hdr */ CAPABILITY_CODE_ORF,
+                               0x15,
+                               /* mpc */ 0x0,
+                               0x1,
+                               0x0,
+                               0x1,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                               /* mpc */ 0x0,
+                               0x1,
+                               0x0,
+                               0x1,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                               /* mpc */ 0x0,
+                               0x2,
+                               0x0,
+                               0x2,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                       },
+                       35,
+                       SHOULD_ERR, /* It should error on invalid
+                                      Route-Refresh.. */
                },
-               35,
-               SHOULD_PARSE, /* parses, but last few tuples should be
-                                gibberish */
-       },
-       /* 18 */
-       {
-               "ORFno",
-               "ORF, multi entry/tuple, entry number too short",
+               /* 16 */
+               {"ORFlu",
+                "ORF, multi entry/tuple, length too long",
+                {
+                        /* hdr */ 0x3,
+                        0x22,
+                        /* mpc */ 0x0,
+                        0x1,
+                        0x0,
+                        0x1,
+                        /* num */ 0x3,
+                        /* tuples */ 0x40,
+                        0x3,
+                        0x80,
+                        0x1,
+                        0x80,
+                        0x2,
+                        /* mpc */ 0x0,
+                        0x2,
+                        0x0,
+                        0x1,
+                        /* num */ 0x3,
+                        /* tuples */ 0x40,
+                        0x3,
+                        0x80,
+                        0x1,
+                        0x80,
+                        0x2,
+                        /* mpc */ 0x0,
+                        0x2,
+                        0x0,
+                        0x2,
+                        /* num */ 0x3,
+                        /* tuples */ 0x40,
+                        0x3,
+                        0x80,
+                        0x1,
+                        0x80,
+                        0x2,
+                },
+                35,
+                SHOULD_ERR},
+               /* 17 */
                {
-                       /* hdr */ 0x3,     0x21,
-                       /* mpc */ 0x0,     0x1,  0x0,  0x1,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40, 0x3,  0x80, 0x1, 0x80, 0x2,
-                       /* mpc */ 0x0,     0x2,  0x0,  0x1,
-                       /* num */ 0x1,
-                       /* tuples */ 0x40, 0x3,  0x80, 0x1, 0x80, 0x2,
-                       /* mpc */ 0x0,     0x2,  0x0,  0x2,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40, 0x3,  0x80, 0x1, 0x80, 0x2,
+                       "ORFnu",
+                       "ORF, multi entry/tuple, entry number too long",
+                       {
+                               /* hdr */ 0x3,
+                               0x21,
+                               /* mpc */ 0x0,
+                               0x1,
+                               0x0,
+                               0x1,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                               /* mpc */ 0x0,
+                               0x2,
+                               0x0,
+                               0x1,
+                               /* num */ 0x4,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                               /* mpc */ 0x0,
+                               0x2,
+                               0x0,
+                               0x2,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                       },
+                       35,
+                       SHOULD_PARSE, /* parses, but last few tuples should be
+                                        gibberish */
                },
-               35,
-               SHOULD_PARSE, /* Parses, but should get gibberish
-                                afi/safis */
-       },
-       /* 17 */
-       {
-               "ORFpad",
-               "ORF, multi entry/tuple, padded to align",
+               /* 18 */
                {
-                       /* hdr */ 0x3,
-                       0x22,
-                       /* mpc */ 0x0,
-                       0x1,
-                       0x0,
-                       0x1,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40,
-                       0x3,
-                       0x80,
-                       0x1,
-                       0x80,
-                       0x2,
-                       /* mpc */ 0x0,
-                       0x2,
-                       0x0,
-                       0x1,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40,
-                       0x3,
-                       0x80,
-                       0x1,
-                       0x80,
-                       0x2,
-                       /* mpc */ 0x0,
-                       0x2,
-                       0x0,
-                       0x2,
-                       /* num */ 0x3,
-                       /* tuples */ 0x40,
-                       0x3,
-                       0x80,
-                       0x1,
-                       0x80,
-                       0x2,
-                       0x00,
+                       "ORFno",
+                       "ORF, multi entry/tuple, entry number too short",
+                       {
+                               /* hdr */ 0x3,
+                               0x21,
+                               /* mpc */ 0x0,
+                               0x1,
+                               0x0,
+                               0x1,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                               /* mpc */ 0x0,
+                               0x2,
+                               0x0,
+                               0x1,
+                               /* num */ 0x1,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                               /* mpc */ 0x0,
+                               0x2,
+                               0x0,
+                               0x2,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                       },
+                       35,
+                       SHOULD_PARSE, /* Parses, but should get gibberish
+                                        afi/safis */
                },
-               36,
-               SHOULD_PARSE,
-       },
-       /* 19 */
-       {
-               "AS4",
-               "AS4 capability",
-               {0x41, 0x4, 0xab, 0xcd, 0xef, 0x12}, /* AS: 2882400018 */
-               6,
-               SHOULD_PARSE,
-               2882400018,
-       },
-       {
-               "AS4",
-               "AS4 capability: short",
-               {0x41, 0x4, 0xab, 0xcd, 0xef}, /* AS: 2882400018 */
-               5,
-               SHOULD_ERR,
-       },
-       {
-               "AS4",
-               "AS4 capability: long",
-               {0x41, 0x4, 0xab, 0xcd, 0xef, 0x12, 0x12},
-               7,
-               SHOULD_ERR,
-               2882400018,
-       },
-       {
-               "GR",
-               "GR capability",
+               /* 17 */
                {
-                       /* hdr */ CAPABILITY_CODE_RESTART,
-                       0xe,
-                       /* R-bit, time */ 0xf1,
-                       0x12,
-                       /* afi */ 0x0,
-                       0x1,
-                       /* safi */ 0x1,
-                       /* flags */ 0xf,
-                       /* afi */ 0x0,
-                       0x2,
-                       /* safi */ 0x1,
-                       /* flags */ 0x0,
-                       /* afi */ 0x0,
-                       0x2,
-                       /* safi */ 0x2,
-                       /* flags */ 0x1,
+                       "ORFpad",
+                       "ORF, multi entry/tuple, padded to align",
+                       {
+                               /* hdr */ 0x3,
+                               0x22,
+                               /* mpc */ 0x0,
+                               0x1,
+                               0x0,
+                               0x1,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                               /* mpc */ 0x0,
+                               0x2,
+                               0x0,
+                               0x1,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                               /* mpc */ 0x0,
+                               0x2,
+                               0x0,
+                               0x2,
+                               /* num */ 0x3,
+                               /* tuples */ 0x40,
+                               0x3,
+                               0x80,
+                               0x1,
+                               0x80,
+                               0x2,
+                               0x00,
+                       },
+                       36,
+                       SHOULD_PARSE,
                },
-               16,
-               SHOULD_PARSE,
-       },
-       {
-               "GR-short",
-               "GR capability, but header length too short",
+               /* 19 */
                {
-                       /* hdr */ 0x40,
-                       0xa,
-                       /* R-bit, time */ 0xf1,
-                       0x12,
-                       /* afi */ 0x0,
-                       0x1,
-                       /* safi */ 0x1,
-                       /* flags */ 0xf,
-                       /* afi */ 0x0,
-                       0x2,
-                       /* safi */ 0x1,
-                       /* flags */ 0x0,
-                       /* afi */ 0x0,
-                       0x2,
-                       /* safi */ 0x2,
-                       /* flags */ 0x1,
+                       "AS4",
+                       "AS4 capability",
+                       {0x41, 0x4, 0xab, 0xcd, 0xef,
+                        0x12}, /* AS: 2882400018 */
+                       6,
+                       SHOULD_PARSE,
+                       2882400018,
                },
-               15 /* array is 16 though */,
-               SHOULD_ERR,
-       },
-       {
-               "GR-long",
-               "GR capability, but header length too long",
                {
-                       /* hdr */ 0x40,
-                       0xf,
-                       /* R-bit, time */ 0xf1,
-                       0x12,
-                       /* afi */ 0x0,
-                       0x1,
-                       /* safi */ 0x1,
-                       /* flags */ 0xf,
-                       /* afi */ 0x0,
-                       0x2,
-                       /* safi */ 0x1,
-                       /* flags */ 0x0,
-                       /* afi */ 0x0,
-                       0x2,
-                       /* safi */ 0x2,
-                       /* flags */ 0x01,
+                       "AS4",
+                       "AS4 capability: short",
+                       {0x41, 0x4, 0xab, 0xcd, 0xef}, /* AS: 2882400018 */
+                       5,
+                       SHOULD_ERR,
                },
-               16,
-               SHOULD_ERR,
-       },
-       {
-               "GR-trunc",
-               "GR capability, but truncated",
                {
-                       /* hdr */ 0x40,
-                       0xf,
-                       /* R-bit, time */ 0xf1,
-                       0x12,
-                       /* afi */ 0x0,
-                       0x1,
-                       /* safi */ 0x1,
-                       /* flags */ 0xf,
-                       /* afi */ 0x0,
-                       0x2,
-                       /* safi */ 0x1,
-                       /* flags */ 0x0,
-                       /* afi */ 0x0,
-                       0x2,
-                       /* safi */ 0x2,
-                       /* flags */ 0x1,
+                       "AS4",
+                       "AS4 capability: long",
+                       {0x41, 0x4, 0xab, 0xcd, 0xef, 0x12, 0x12},
+                       7,
+                       SHOULD_ERR,
+                       2882400018,
                },
-               15,
-               SHOULD_ERR,
-       },
-       {
-               "GR-empty",
-               "GR capability, but empty.",
                {
-                       /* hdr */ 0x40,
-                       0x0,
+                       "GR",
+                       "GR capability",
+                       {
+                               /* hdr */ CAPABILITY_CODE_RESTART, 0xe,
+                               /* R-bit, time */ 0xf1, 0x12,
+                               /* afi */ 0x0, 0x1,
+                               /* safi */ 0x1,
+                               /* flags */ 0xf,
+                               /* afi */ 0x0, 0x2,
+                               /* safi */ 0x1,
+                               /* flags */ 0x0,
+                               /* afi */ 0x0, 0x2,
+                               /* safi */ 0x2,
+                               /* flags */ 0x1,
+                       },
+                       16,
+                       SHOULD_PARSE,
                },
-               2,
-               SHOULD_ERR,
-       },
-       {
-               "MP-empty",
-               "MP capability, but empty.",
                {
-                       /* hdr */ 0x1,
-                       0x0,
+                       "GR-short",
+                       "GR capability, but header length too short",
+                       {
+                               /* hdr */ 0x40, 0xa,
+                               /* R-bit, time */ 0xf1, 0x12,
+                               /* afi */ 0x0, 0x1,
+                               /* safi */ 0x1,
+                               /* flags */ 0xf,
+                               /* afi */ 0x0, 0x2,
+                               /* safi */ 0x1,
+                               /* flags */ 0x0,
+                               /* afi */ 0x0, 0x2,
+                               /* safi */ 0x2,
+                               /* flags */ 0x1,
+                       },
+                       15 /* array is 16 though */,
+                       SHOULD_ERR,
                },
-               2,
-               SHOULD_ERR,
-       },
-       {
-               "ORF-empty",
-               "ORF capability, but empty.",
                {
-                       /* hdr */ 0x3,
-                       0x0,
+                       "GR-long",
+                       "GR capability, but header length too long",
+                       {
+                               /* hdr */ 0x40, 0xf,
+                               /* R-bit, time */ 0xf1, 0x12,
+                               /* afi */ 0x0, 0x1,
+                               /* safi */ 0x1,
+                               /* flags */ 0xf,
+                               /* afi */ 0x0, 0x2,
+                               /* safi */ 0x1,
+                               /* flags */ 0x0,
+                               /* afi */ 0x0, 0x2,
+                               /* safi */ 0x2,
+                               /* flags */ 0x01,
+                       },
+                       16,
+                       SHOULD_ERR,
                },
-               2,
-               SHOULD_ERR,
-       },
-       {
-               "AS4-empty",
-               "AS4 capability, but empty.",
                {
-                       /* hdr */ 0x41,
-                       0x0,
+                       "GR-trunc",
+                       "GR capability, but truncated",
+                       {
+                               /* hdr */ 0x40, 0xf,
+                               /* R-bit, time */ 0xf1, 0x12,
+                               /* afi */ 0x0, 0x1,
+                               /* safi */ 0x1,
+                               /* flags */ 0xf,
+                               /* afi */ 0x0, 0x2,
+                               /* safi */ 0x1,
+                               /* flags */ 0x0,
+                               /* afi */ 0x0, 0x2,
+                               /* safi */ 0x2,
+                               /* flags */ 0x1,
+                       },
+                       15,
+                       SHOULD_ERR,
                },
-               2,
-               SHOULD_ERR,
-       },
-       {
-               "dyn-empty",
-               "Dynamic capability, but empty.",
                {
-                       /* hdr */ 0x42,
-                       0x0,
+                       "GR-empty",
+                       "GR capability, but empty.",
+                       {
+                               /* hdr */ 0x40, 0x0,
+                       },
+                       2,
+                       SHOULD_ERR,
                },
-               2,
-               SHOULD_PARSE,
-       },
-       {
-               "dyn-old",
-               "Dynamic capability (deprecated version)",
-               {CAPABILITY_CODE_DYNAMIC, 0x0},
-               2,
-               SHOULD_PARSE,
-       },
-       {NULL, NULL, {0}, 0, 0}};
+               {
+                       "MP-empty",
+                       "MP capability, but empty.",
+                       {
+                               /* hdr */ 0x1, 0x0,
+                       },
+                       2,
+                       SHOULD_ERR,
+               },
+               {
+                       "ORF-empty",
+                       "ORF capability, but empty.",
+                       {
+                               /* hdr */ 0x3, 0x0,
+                       },
+                       2,
+                       SHOULD_ERR,
+               },
+               {
+                       "AS4-empty",
+                       "AS4 capability, but empty.",
+                       {
+                               /* hdr */ 0x41, 0x0,
+                       },
+                       2,
+                       SHOULD_ERR,
+               },
+               {
+                       "dyn-empty",
+                       "Dynamic capability, but empty.",
+                       {
+                               /* hdr */ 0x42, 0x0,
+                       },
+                       2,
+                       SHOULD_PARSE,
+               },
+               {
+                       "dyn-old",
+                       "Dynamic capability (deprecated version)",
+                       {CAPABILITY_CODE_DYNAMIC, 0x0},
+                       2,
+                       SHOULD_PARSE,
+               },
+               {NULL, NULL, {0}, 0, 0}};
 
 /* DYNAMIC message */
 struct test_segment dynamic_cap_msgs[] = {
@@ -819,9 +871,9 @@ static void parse_test(struct peer *peer, struct test_segment *t, int type)
                failed++;
 
        if (tty)
-               printf("%s", (failed > oldfailed)
-                                    ? VT100_RED "failed!" VT100_RESET
-                                    : VT100_GREEN "OK" VT100_RESET);
+               printf("%s",
+                      (failed > oldfailed) ? VT100_RED "failed!" VT100_RESET
+                                           : VT100_GREEN "OK" VT100_RESET);
        else
                printf("%s", (failed > oldfailed) ? "failed!" : "OK");
 
index 2dbde0dbdde530fde5daa374124bec094d1d594c..7c0afa1b92a5849b25c8a81a9347a281359eff4e 100644 (file)
@@ -610,15 +610,15 @@ static struct test_segment {
                        /* Nexthop */ 192, 168, 0, 1,
                        /* SNPA (defunct, MBZ) */ 0x0,
                        /* NLRI tuples */ 88 + 16, 0, 1, 2, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,                /* RD_TYPE_AS */
-                       0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
-                       10, 1,               /* 10.1/16 */
-                       88 + 17, 0xff, 0, 0, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,           /* RD_TYPE_IP */
-                       192, 168, 0, 1, /* IPv4 */
-                       10, 2, 3,       /* 10.2.3/17 */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_AS */
+                       0, 2, 0, 0xff, 3, 4,                /* AS(2):val(4) */
+                       10, 1,                              /* 10.1/16 */
+                       88 + 17, 0xff, 0, 0,                /* tag */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_IP */
+                       192, 168, 0, 1,                     /* IPv4 */
+                       10, 2, 3,                           /* 10.2.3/17 */
                },
                (4 + 12 + 1 + (1 + 3 + 8 + 2) + (1 + 3 + 8 + 3)),
                SHOULD_PARSE,
@@ -700,15 +700,15 @@ static struct test_segment {
                        /* Nexthop */ 192, 168, 0, 1,
                        /* SNPA (defunct, MBZ) */ 0x0,
                        /* NLRI tuples */ 88 + 32, 0, 1, 2, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,                /* RD_TYPE_AS */
-                       0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
-                       10, 1,               /* 10.1/16 */
-                       88 + 17, 0xff, 0, 0, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,           /* RD_TYPE_IP */
-                       192, 168, 0, 1, /* IPv4 */
-                       10, 2, 3,       /* 10.2.3/17 */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_AS */
+                       0, 2, 0, 0xff, 3, 4,                /* AS(2):val(4) */
+                       10, 1,                              /* 10.1/16 */
+                       88 + 17, 0xff, 0, 0,                /* tag */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_IP */
+                       192, 168, 0, 1,                     /* IPv4 */
+                       10, 2, 3,                           /* 10.2.3/17 */
                },
                (4 + 12 + 1 + (1 + 3 + 8 + 2) + (1 + 3 + 8 + 3)),
                SHOULD_ERR,
@@ -727,16 +727,16 @@ static struct test_segment {
                        /* Nexthop */ 192, 168, 0, 1,
                        /* SNPA (defunct, MBZ) */ 0x0,
                        /* NLRI tuples */ 88 + 16, 0, 1, 2, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,                /* RD_TYPE_AS */
-                       0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
-                       10, 1,               /* 10.1/16 */
-                       88 + 17, 0xff, 0, 0, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,           /* RD_TYPE_IP */
-                       192, 168, 0, 1, /* IPv4 */
-                       10, 2, 3,       /* 10.2.3/17 */
-                       88 + 1,         /* bogus */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_AS */
+                       0, 2, 0, 0xff, 3, 4,                /* AS(2):val(4) */
+                       10, 1,                              /* 10.1/16 */
+                       88 + 17, 0xff, 0, 0,                /* tag */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_IP */
+                       192, 168, 0, 1,                     /* IPv4 */
+                       10, 2, 3,                           /* 10.2.3/17 */
+                       88 + 1,                             /* bogus */
                },
                (4 + 12 + 1 + (1 + 3 + 8 + 2) + (1 + 3 + 8 + 3) + 1),
                SHOULD_ERR,
@@ -755,15 +755,15 @@ static struct test_segment {
                        /* Nexthop */ 192, 168, 0, 1,
                        /* SNPA (defunct, MBZ) */ 0x0,
                        /* NLRI tuples */ 88 + 16, 0, 1, 2, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,                /* RD_TYPE_AS */
-                       0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
-                       10, 1,               /* 10.1/16 */
-                       88 + 2, 0xff, 0, 0,  /* tag */
-                       /* rd, 8 octets */
-                       0, 0,           /* RD_TYPE_IP */
-                       192, 168, 0, 1, /* IPv4 */
-                       10, 2, 3,       /* 10.2.3/17 */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_AS */
+                       0, 2, 0, 0xff, 3, 4,                /* AS(2):val(4) */
+                       10, 1,                              /* 10.1/16 */
+                       88 + 2, 0xff, 0, 0,                 /* tag */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_IP */
+                       192, 168, 0, 1,                     /* IPv4 */
+                       10, 2, 3,                           /* 10.2.3/17 */
                },
                (4 + 12 + 1 + (1 + 3 + 8 + 2) + (1 + 3 + 8 + 3)),
                SHOULD_ERR,
@@ -782,15 +782,15 @@ static struct test_segment {
                        /* Nexthop */ 192, 168, 0, 1,
                        /* SNPA (defunct, MBZ) */ 0x0,
                        /* NLRI tuples */ 88 + 16, 0, 1, 2, /* tag */
-                       /* rd, 8 octets */
-                       0xff, 0,             /* Bogus RD */
-                       0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
-                       10, 1,               /* 10.1/16 */
-                       88 + 17, 0xff, 0, 0, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,           /* RD_TYPE_IP */
-                       192, 168, 0, 1, /* IPv4 */
-                       10, 2, 3,       /* 10.2.3/17 */
+                                                           /* rd, 8 octets */
+                       0xff, 0,                            /* Bogus RD */
+                       0, 2, 0, 0xff, 3, 4,                /* AS(2):val(4) */
+                       10, 1,                              /* 10.1/16 */
+                       88 + 17, 0xff, 0, 0,                /* tag */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_IP */
+                       192, 168, 0, 1,                     /* IPv4 */
+                       10, 2, 3,                           /* 10.2.3/17 */
                },
                (4 + 12 + 1 + (1 + 3 + 8 + 2) + (1 + 3 + 8 + 3)),
                SHOULD_PARSE,
@@ -809,16 +809,16 @@ static struct test_segment {
                        /* Nexthop */ 192, 168, 0, 1,
                        /* SNPA (defunct, MBZ) */ 0x0,
                        /* NLRI tuples */ 88 + 16, 0, 1, 2, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,                /* RD_TYPE_AS */
-                       0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
-                       10, 1,               /* 10.1/16 */
-                       88 + 17, 0xff, 0, 0, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,           /* RD_TYPE_IP */
-                       192, 168, 0, 1, /* IPv4 */
-                       10, 2, 3,       /* 10.2.3/17 */
-                       0               /* 0/0, bogus for vpnv4 ?? */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_AS */
+                       0, 2, 0, 0xff, 3, 4,                /* AS(2):val(4) */
+                       10, 1,                              /* 10.1/16 */
+                       88 + 17, 0xff, 0, 0,                /* tag */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_IP */
+                       192, 168, 0, 1,                     /* IPv4 */
+                       10, 2, 3,                           /* 10.2.3/17 */
+                       0 /* 0/0, bogus for vpnv4 ?? */
                },
                (4 + 12 + 1 + (1 + 3 + 8 + 2) + (1 + 3 + 8 + 3) + 1),
                SHOULD_ERR,
@@ -901,23 +901,11 @@ static struct test_segment mp_unreach_segments[] = {
                "IPv6-unreach2",
                "IPV6 MP Unreach, 2 NLRIs",
                {
-                       /* AFI / SAFI */ 0x0,
-                       AFI_IP6,
-                       SAFI_UNICAST,
-                       /* NLRI tuples */ 32,
-                       0xff,
-                       0xfe,
-                       0x1,
-                       0x2, /* fffe:102::/32 */
-                       64,
-                       0xff,
-                       0xfe,
-                       0x0,
-                       0x1, /* fffe:1:2:3::/64 */
-                       0x0,
-                       0x2,
-                       0x0,
-                       0x3,
+                       /* AFI / SAFI */ 0x0, AFI_IP6, SAFI_UNICAST,
+                       /* NLRI tuples */ 32, 0xff, 0xfe, 0x1,
+                       0x2,                      /* fffe:102::/32 */
+                       64, 0xff, 0xfe, 0x0, 0x1, /* fffe:1:2:3::/64 */
+                       0x0, 0x2, 0x0, 0x3,
                },
                (3 + 5 + 9),
                SHOULD_PARSE,
@@ -992,15 +980,15 @@ static struct test_segment mp_unreach_segments[] = {
                {
                        /* AFI / SAFI */ 0x0, AFI_IP, IANA_SAFI_MPLS_VPN,
                        /* NLRI tuples */ 88 + 16, 0, 1, 2, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,                /* RD_TYPE_AS */
-                       0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
-                       10, 1,               /* 10.1/16 */
-                       88 + 17, 0xff, 0, 0, /* tag */
-                       /* rd, 8 octets */
-                       0, 0,           /* RD_TYPE_IP */
-                       192, 168, 0, 1, /* IPv4 */
-                       10, 2, 3,       /* 10.2.3/17 */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_AS */
+                       0, 2, 0, 0xff, 3, 4,                /* AS(2):val(4) */
+                       10, 1,                              /* 10.1/16 */
+                       88 + 17, 0xff, 0, 0,                /* tag */
+                                                           /* rd, 8 octets */
+                       0, 0,                               /* RD_TYPE_IP */
+                       192, 168, 0, 1,                     /* IPv4 */
+                       10, 2, 3,                           /* 10.2.3/17 */
                },
                (3 + (1 + 3 + 8 + 2) + (1 + 3 + 8 + 3)),
                SHOULD_PARSE,
@@ -1029,9 +1017,9 @@ static void handle_result(struct peer *peer, struct test_segment *t,
 
 
        if (tty)
-               printf("%s", (failed > oldfailed)
-                                    ? VT100_RED "failed!" VT100_RESET
-                                    : VT100_GREEN "OK" VT100_RESET);
+               printf("%s",
+                      (failed > oldfailed) ? VT100_RED "failed!" VT100_RESET
+                                           : VT100_GREEN "OK" VT100_RESET);
        else
                printf("%s", (failed > oldfailed) ? "failed!" : "OK");
 
index 72fe2d821c074d88ce9a3ec7d1588740bd7ab5d0..ccd3b6f4c2c99ee826dfe0100bf650d08e55bed7 100644 (file)
@@ -361,8 +361,7 @@ testcase_t test_bgp_info_mpath_update = {
  * Set up testcase vector
  */
 testcase_t *all_tests[] = {
-       &test_bgp_cfg_maximum_paths,
-       &test_bgp_mp_list,
+       &test_bgp_cfg_maximum_paths, &test_bgp_mp_list,
        &test_bgp_info_mpath_update,
 };
 
index e149487c5da04af8659d396b3e5b86ffcadef692..48dd99d28a9bfa455ea2dbccf1778c069f10b947 100644 (file)
@@ -49,23 +49,19 @@ static vector test_cmds;
 static char test_buf[32768];
 
 static struct cmd_node bgp_node = {
-       BGP_NODE,
-       "%s(config-router)# ",
+       BGP_NODE, "%s(config-router)# ",
 };
 
 static struct cmd_node rip_node = {
-       RIP_NODE,
-       "%s(config-router)# ",
+       RIP_NODE, "%s(config-router)# ",
 };
 
 static struct cmd_node isis_node = {
-       ISIS_NODE,
-       "%s(config-router)# ",
+       ISIS_NODE, "%s(config-router)# ",
 };
 
 static struct cmd_node interface_node = {
-       INTERFACE_NODE,
-       "%s(config-if)# ",
+       INTERFACE_NODE, "%s(config-if)# ",
 };
 
 static struct cmd_node rmap_node = {RMAP_NODE, "%s(config-route-map)# "};
index 87ea3039ecf490c3df3841df977a13167d41e497..c265e164ebbd97519a8fdf28d0b0fae68c60f31f 100644 (file)
@@ -401,7 +401,7 @@ static int verify(u_char *buffer, testsz_t len)
 }
 
 static int /* return checksum in low-order 16 bits */
-in_cksum_optimized(void *parg, int nbytes)
+       in_cksum_optimized(void *parg, int nbytes)
 {
        u_short *ptr = parg;
        register long sum;       /* assumes long == 32 bits */
@@ -433,7 +433,7 @@ in_cksum_optimized(void *parg, int nbytes)
 
 
 static int /* return checksum in low-order 16 bits */
-in_cksum_rfc(void *parg, int count)
+       in_cksum_rfc(void *parg, int count)
 /* from RFC 1071 */
 {
        u_short *addr = parg;
index 8438334377066d24da6ae10d6978a356b63e4f5a..c2cb5c2ea5afdcbea07cf6a53f2fccbcee8364d2 100644 (file)
 #include "memory_vty.h"
 
 zebra_capabilities_t _caps_p[] = {
-       ZCAP_NET_RAW,
-       ZCAP_BIND,
-       ZCAP_NET_ADMIN,
-       ZCAP_DAC_OVERRIDE,
+       ZCAP_NET_RAW, ZCAP_BIND, ZCAP_NET_ADMIN, ZCAP_DAC_OVERRIDE,
 };
 
 struct zebra_privs_t test_privs = {
index eb9bca71d73c209eb76f41bfdbb3365b04cfa948..43e79ba9d06b57ef5882e583354224d55aabbf3b 100644 (file)
@@ -97,8 +97,8 @@ static int timer_func(struct thread *thread)
 
 static int cmp_timeval(const void *a, const void *b)
 {
-       const struct timeval *ta = *(struct timeval *const *)a;
-       const struct timeval *tb = *(struct timeval *const *)b;
+       const struct timeval *ta = *(struct timeval * const *)a;
+       const struct timeval *tb = *(struct timeval * const *)b;
 
        if (timercmp(ta, tb, <))
                return -1;
index 7372cc8449c1c93a7f8ae3378faa85cf0e2d4e21..39527eca777b8490beeca981ca8b21c832d4f881 100644 (file)
@@ -869,13 +869,12 @@ static int run_stop_schedule(void)
                                if (ratio < 10)
                                        ratio++;
 
-                               TVCALC(interval, ratio
-                                                        * (TVELEM(&after)
-                                                           - TVELEM(&before)
-                                                           + TVADJUST));
-                               TVCALC(maxinterval, TVELEM(&stopat)
-                                                           - TVELEM(&after)
-                                                           + TVADJUST);
+                               TVCALC(interval,
+                                      ratio * (TVELEM(&after) - TVELEM(&before)
+                                               + TVADJUST));
+                               TVCALC(maxinterval,
+                                      TVELEM(&stopat) - TVELEM(&after)
+                                              + TVADJUST);
 
                                if (timercmp(&interval, &maxinterval, >))
                                        interval = maxinterval;
index bca582d6289c05195668f021ad4dade634bc3598..f6a2c9258628ac4add2f7e586b7b8828df87480b 100644 (file)
@@ -303,7 +303,9 @@ static int vtysh_execute_func(const char *line, int pager)
                     || saved_node == BGP_IPV4L_NODE
                     || saved_node == BGP_IPV6L_NODE
                     || saved_node == BGP_IPV6M_NODE
-                    || saved_node == BGP_EVPN_NODE)
+                    || saved_node == BGP_EVPN_NODE
+                    || saved_node == LDP_IPV4_NODE
+                    || saved_node == LDP_IPV6_NODE)
                    && (tried == 1)) {
                        vtysh_execute("exit-address-family");
                } else if ((saved_node == BGP_EVPN_VNI_NODE) && (tried == 1)) {
@@ -496,6 +498,29 @@ int vtysh_mark_file(const char *filename)
                strcpy(vty_buf_copy, vty->buf);
                vty_buf_trimmed = trim(vty_buf_copy);
 
+               switch (vty->node) {
+               case LDP_IPV4_IFACE_NODE:
+                       if (strncmp(vty_buf_copy, "   ", 3)) {
+                               fprintf(stdout, "  end\n");
+                               vty->node = LDP_IPV4_NODE;
+                       }
+                       break;
+               case LDP_IPV6_IFACE_NODE:
+                       if (strncmp(vty_buf_copy, "   ", 3)) {
+                               fprintf(stdout, "  end\n");
+                               vty->node = LDP_IPV6_NODE;
+                       }
+                       break;
+               case LDP_PSEUDOWIRE_NODE:
+                       if (strncmp(vty_buf_copy, "  ", 2)) {
+                               fprintf(stdout, " end\n");
+                               vty->node = LDP_L2VPN_NODE;
+                       }
+                       break;
+               default:
+                       break;
+               }
+
                if (vty_buf_trimmed[0] == '!' || vty_buf_trimmed[0] == '#') {
                        fprintf(stdout, "%s", vty->buf);
                        continue;
@@ -667,8 +692,9 @@ int vtysh_config_from_file(struct vty *vty, FILE *fp)
                case CMD_ERR_NO_MATCH:
                        fprintf(stderr, "line %d: %% Unknown command[%d]: %s",
                                lineno, vty->node, vty->buf);
-                       retcode = CMD_ERR_NO_MATCH; /* once we have an error, we
-                                                      remember & return that */
+                       retcode =
+                               CMD_ERR_NO_MATCH; /* once we have an error, we
+                                                    remember & return that */
                        break;
                case CMD_ERR_INCOMPLETE:
                        fprintf(stderr,
@@ -870,33 +896,27 @@ static char **new_completion(char *text, int start, int end)
 
 /* Vty node structures. */
 static struct cmd_node bgp_node = {
-       BGP_NODE,
-       "%s(config-router)# ",
+       BGP_NODE, "%s(config-router)# ",
 };
 
 static struct cmd_node rip_node = {
-       RIP_NODE,
-       "%s(config-router)# ",
+       RIP_NODE, "%s(config-router)# ",
 };
 
 static struct cmd_node isis_node = {
-       ISIS_NODE,
-       "%s(config-router)# ",
+       ISIS_NODE, "%s(config-router)# ",
 };
 
 static struct cmd_node interface_node = {
-       INTERFACE_NODE,
-       "%s(config-if)# ",
+       INTERFACE_NODE, "%s(config-if)# ",
 };
 
 static struct cmd_node ns_node = {
-       NS_NODE,
-       "%s(config-logical-router)# ",
+       NS_NODE, "%s(config-logical-router)# ",
 };
 
 static struct cmd_node vrf_node = {
-       VRF_NODE,
-       "%s(config-vrf)# ",
+       VRF_NODE, "%s(config-vrf)# ",
 };
 
 static struct cmd_node rmap_node = {RMAP_NODE, "%s(config-route-map)# "};
@@ -978,8 +998,7 @@ static struct cmd_node keychain_key_node = {KEYCHAIN_KEY_NODE,
                                            "%s(config-keychain-key)# "};
 
 struct cmd_node link_params_node = {
-       LINK_PARAMS_NODE,
-       "%s(config-link-params)# ",
+       LINK_PARAMS_NODE, "%s(config-link-params)# ",
 };
 
 /* Defined in lib/vty.c */
@@ -1274,6 +1293,14 @@ DEFUNSH(VTYSH_LDPD, ldp_address_family_ipv6, ldp_address_family_ipv6_cmd,
        return CMD_SUCCESS;
 }
 
+DEFUNSH(VTYSH_LDPD, ldp_exit_address_family, ldp_exit_address_family_cmd,
+       "exit-address-family", "Exit from Address Family configuration mode\n")
+{
+       if (vty->node == LDP_IPV4_NODE || vty->node == LDP_IPV6_NODE)
+               vty->node = LDP_NODE;
+       return CMD_SUCCESS;
+}
+
 DEFUNSH(VTYSH_LDPD, ldp_interface_ifname, ldp_interface_ifname_cmd,
        "interface IFNAME",
        "Enable LDP on an interface and enter interface submode\n"
@@ -1635,8 +1662,7 @@ DEFUNSH(VTYSH_INTERFACE, vtysh_interface, vtysh_interface_cmd,
 /* TODO Implement "no interface command in isisd. */
 DEFSH(VTYSH_ZEBRA | VTYSH_RIPD | VTYSH_RIPNGD | VTYSH_OSPFD | VTYSH_OSPF6D
              | VTYSH_EIGRPD,
-      vtysh_no_interface_cmd, "no interface IFNAME",
-      NO_STR
+      vtysh_no_interface_cmd, "no interface IFNAME", NO_STR
       "Delete a pseudo interface's configuration\n"
       "Interface's name\n")
 
@@ -1663,8 +1689,7 @@ DEFUNSH(VTYSH_VRF, vtysh_vrf, vtysh_vrf_cmd, "vrf NAME",
        return CMD_SUCCESS;
 }
 
-DEFSH(VTYSH_ZEBRA, vtysh_no_vrf_cmd, "no vrf NAME",
-      NO_STR
+DEFSH(VTYSH_ZEBRA, vtysh_no_vrf_cmd, "no vrf NAME", NO_STR
       "Delete a pseudo vrf's configuration\n"
       "VRF's name\n")
 
@@ -1915,8 +1940,7 @@ DEFUNSH(VTYSH_ALL, vtysh_log_stdout_level, vtysh_log_stdout_level_cmd,
 }
 
 DEFUNSH(VTYSH_ALL, no_vtysh_log_stdout, no_vtysh_log_stdout_cmd,
-       "no log stdout [LEVEL]",
-       NO_STR
+       "no log stdout [LEVEL]", NO_STR
        "Logging control\n"
        "Cancel logging to stdout\n"
        "Logging level\n")
@@ -1942,8 +1966,7 @@ DEFUNSH(VTYSH_ALL, vtysh_log_file_level, vtysh_log_file_level_cmd,
 }
 
 DEFUNSH(VTYSH_ALL, no_vtysh_log_file, no_vtysh_log_file_cmd,
-       "no log file [FILENAME [LEVEL]]",
-       NO_STR
+       "no log file [FILENAME [LEVEL]]", NO_STR
        "Logging control\n"
        "Cancel logging to file\n"
        "Logging file name\n"
@@ -1961,8 +1984,7 @@ DEFUNSH(VTYSH_ALL, vtysh_log_monitor, vtysh_log_monitor_cmd,
 }
 
 DEFUNSH(VTYSH_ALL, no_vtysh_log_monitor, no_vtysh_log_monitor_cmd,
-       "no log monitor [LEVEL]",
-       NO_STR
+       "no log monitor [LEVEL]", NO_STR
        "Logging control\n"
        "Disable terminal line (monitor) logging\n"
        "Logging level\n")
@@ -1979,8 +2001,7 @@ DEFUNSH(VTYSH_ALL, vtysh_log_syslog, vtysh_log_syslog_cmd,
 }
 
 DEFUNSH(VTYSH_ALL, no_vtysh_log_syslog, no_vtysh_log_syslog_cmd,
-       "no log syslog [LEVEL]",
-       NO_STR
+       "no log syslog [LEVEL]", NO_STR
        "Logging control\n"
        "Cancel logging to syslog\n"
        "Logging level\n")
@@ -1998,8 +2019,7 @@ DEFUNSH(VTYSH_ALL, vtysh_log_facility, vtysh_log_facility_cmd,
 }
 
 DEFUNSH(VTYSH_ALL, no_vtysh_log_facility, no_vtysh_log_facility_cmd,
-       "no log facility [FACILITY]",
-       NO_STR
+       "no log facility [FACILITY]", NO_STR
        "Logging control\n"
        "Reset syslog facility to default (daemon)\n"
        "Syslog facility\n")
@@ -2019,8 +2039,7 @@ DEFUNSH_DEPRECATED(
 }
 
 DEFUNSH_DEPRECATED(VTYSH_ALL, no_vtysh_log_trap, no_vtysh_log_trap_cmd,
-                  "no log trap [LEVEL]",
-                  NO_STR
+                  "no log trap [LEVEL]", NO_STR
                   "Logging control\n"
                   "Permit all logging information\n"
                   "Logging level\n")
@@ -2037,8 +2056,7 @@ DEFUNSH(VTYSH_ALL, vtysh_log_record_priority, vtysh_log_record_priority_cmd,
 }
 
 DEFUNSH(VTYSH_ALL, no_vtysh_log_record_priority,
-       no_vtysh_log_record_priority_cmd, "no log record-priority",
-       NO_STR
+       no_vtysh_log_record_priority_cmd, "no log record-priority", NO_STR
        "Logging control\n"
        "Do not log the priority of the message within the message\n")
 {
@@ -2102,8 +2120,7 @@ DEFUNSH(VTYSH_ALL, vtysh_config_enable_password, vtysh_enable_password_cmd,
 }
 
 DEFUNSH(VTYSH_ALL, no_vtysh_config_enable_password,
-       no_vtysh_enable_password_cmd, "no enable password",
-       NO_STR
+       no_vtysh_enable_password_cmd, "no enable password", NO_STR
        "Modify enable password parameters\n"
        "Assign the privileged level password\n")
 {
@@ -2436,7 +2453,7 @@ DEFUN (vtysh_show_daemons,
 
 /* Execute command in child process. */
 static void execute_command(const char *command, int argc,
-                           struct cmd_token *arg1, const char *arg2)
+                           const char *arg1, const char *arg2)
 {
        pid_t pid;
        int status;
@@ -2481,7 +2498,10 @@ DEFUN (vtysh_ping,
        "Send echo messages\n"
        "Ping destination address or hostname\n")
 {
-       execute_command("ping", 1, argv[0], NULL);
+       int idx = 1;
+
+       argv_find(argv, argc, "WORD", &idx);
+       execute_command("ping", 1, argv[idx]->arg, NULL);
        return CMD_SUCCESS;
 }
 
@@ -2496,7 +2516,10 @@ DEFUN (vtysh_traceroute,
        "Trace route to destination\n"
        "Trace route to destination address or hostname\n")
 {
-       execute_command("traceroute", 1, argv[0], NULL);
+       int idx = 1;
+
+       argv_find(argv, argc, "WORD", &idx);
+       execute_command("traceroute", 1, argv[idx]->arg, NULL);
        return CMD_SUCCESS;
 }
 
@@ -2512,7 +2535,7 @@ DEFUN (vtysh_ping6,
        "IPv6 echo\n"
        "Ping destination address or hostname\n")
 {
-       execute_command("ping6", 1, argv[0], NULL);
+       execute_command("ping6", 1, argv[2]->arg, NULL);
        return CMD_SUCCESS;
 }
 
@@ -2523,7 +2546,7 @@ DEFUN (vtysh_traceroute6,
        "IPv6 trace\n"
        "Trace route to destination address or hostname\n")
 {
-       execute_command("traceroute6", 1, argv[0], NULL);
+       execute_command("traceroute6", 1, argv[2]->arg, NULL);
        return CMD_SUCCESS;
 }
 
@@ -2534,7 +2557,7 @@ DEFUN (vtysh_telnet,
        "Open a telnet connection\n"
        "IP address or hostname of a remote system\n")
 {
-       execute_command("telnet", 1, argv[0], NULL);
+       execute_command("telnet", 1, argv[1]->arg, NULL);
        return CMD_SUCCESS;
 }
 
@@ -2545,7 +2568,7 @@ DEFUN (vtysh_telnet_port,
        "IP address or hostname of a remote system\n"
        "TCP Port number\n")
 {
-       execute_command("telnet", 2, argv[0], argv[1]);
+       execute_command("telnet", 2, argv[1]->arg, argv[2]->arg);
        return CMD_SUCCESS;
 }
 
@@ -2555,7 +2578,7 @@ DEFUN (vtysh_ssh,
        "Open an ssh connection\n"
        "[user@]host\n")
 {
-       execute_command("ssh", 1, argv[0], NULL);
+       execute_command("ssh", 1, argv[1]->arg, NULL);
        return CMD_SUCCESS;
 }
 
@@ -2598,9 +2621,39 @@ DEFUN (config_list,
        return cmd_list_cmds(vty, argc == 2);
 }
 
+DEFUN(find,
+      find_cmd,
+      "find COMMAND...",
+      "Find CLI command containing text\n"
+      "Text to search for\n")
+{
+       char *text = argv_concat(argv, argc, 1);
+       const struct cmd_node *node;
+       const struct cmd_element *cli;
+       vector clis;
+
+       for (unsigned int i = 0; i < vector_active(cmdvec); i++) {
+               node = vector_slot(cmdvec, i);
+               if (!node)
+                       continue;
+               clis = node->cmd_vector;
+               for (unsigned int j = 0; j < vector_active(clis); j++) {
+                       cli = vector_slot(clis, j);
+                       if (strcasestr(cli->string, text))
+                               fprintf(stdout, "  (%s)  %s\n",
+                                       node_names[node->node], cli->string);
+               }
+       }
+
+       XFREE(MTYPE_TMP, text);
+
+       return CMD_SUCCESS;
+}
+
 static void vtysh_install_default(enum node_type node)
 {
        install_element(node, &config_list_cmd);
+       install_element(node, &find_cmd);
 }
 
 /* Making connection to protocol daemon. */
@@ -2892,48 +2945,13 @@ void vtysh_init_vty(void)
        install_node(&isis_node, NULL);
        install_node(&vty_node, NULL);
 
-       vtysh_install_default(VIEW_NODE);
-       vtysh_install_default(CONFIG_NODE);
-       vtysh_install_default(BGP_NODE);
-       vtysh_install_default(RIP_NODE);
-       vtysh_install_default(INTERFACE_NODE);
-       vtysh_install_default(LINK_PARAMS_NODE);
-       vtysh_install_default(NS_NODE);
-       vtysh_install_default(VRF_NODE);
-       vtysh_install_default(RMAP_NODE);
-       vtysh_install_default(ZEBRA_NODE);
-       vtysh_install_default(BGP_VPNV4_NODE);
-       vtysh_install_default(BGP_VPNV6_NODE);
-       vtysh_install_default(BGP_IPV4_NODE);
-       vtysh_install_default(BGP_IPV4M_NODE);
-       vtysh_install_default(BGP_IPV4L_NODE);
-       vtysh_install_default(BGP_IPV6_NODE);
-       vtysh_install_default(BGP_IPV6M_NODE);
-       vtysh_install_default(BGP_EVPN_NODE);
-       vtysh_install_default(BGP_EVPN_VNI_NODE);
-       vtysh_install_default(BGP_IPV6L_NODE);
-#if ENABLE_BGP_VNC
-       vtysh_install_default(BGP_VRF_POLICY_NODE);
-       vtysh_install_default(BGP_VNC_DEFAULTS_NODE);
-       vtysh_install_default(BGP_VNC_NVE_GROUP_NODE);
-       vtysh_install_default(BGP_VNC_L2_GROUP_NODE);
-#endif
-       vtysh_install_default(OSPF_NODE);
-       vtysh_install_default(EIGRP_NODE);
-       vtysh_install_default(BABEL_NODE);
-       vtysh_install_default(RIPNG_NODE);
-       vtysh_install_default(OSPF6_NODE);
-       vtysh_install_default(LDP_NODE);
-       vtysh_install_default(LDP_IPV4_NODE);
-       vtysh_install_default(LDP_IPV6_NODE);
-       vtysh_install_default(LDP_IPV4_IFACE_NODE);
-       vtysh_install_default(LDP_IPV6_IFACE_NODE);
-       vtysh_install_default(LDP_L2VPN_NODE);
-       vtysh_install_default(LDP_PSEUDOWIRE_NODE);
-       vtysh_install_default(ISIS_NODE);
-       vtysh_install_default(KEYCHAIN_NODE);
-       vtysh_install_default(KEYCHAIN_KEY_NODE);
-       vtysh_install_default(VTY_NODE);
+       struct cmd_node *node;
+       for (unsigned int i = 0; i < vector_active(cmdvec); i++) {
+               node = vector_slot(cmdvec, i);
+               if (!node || node->node == VIEW_NODE)
+                       continue;
+               vtysh_install_default(node->node);
+       }
 
        install_element(VIEW_NODE, &vtysh_enable_cmd);
        install_element(ENABLE_NODE, &vtysh_config_terminal_cmd);
@@ -2961,8 +2979,10 @@ void vtysh_init_vty(void)
        install_element(LDP_NODE, &vtysh_quit_ldpd_cmd);
        install_element(LDP_IPV4_NODE, &vtysh_exit_ldpd_cmd);
        install_element(LDP_IPV4_NODE, &vtysh_quit_ldpd_cmd);
+       install_element(LDP_IPV4_NODE, &ldp_exit_address_family_cmd);
        install_element(LDP_IPV6_NODE, &vtysh_exit_ldpd_cmd);
        install_element(LDP_IPV6_NODE, &vtysh_quit_ldpd_cmd);
+       install_element(LDP_IPV6_NODE, &ldp_exit_address_family_cmd);
        install_element(LDP_IPV4_IFACE_NODE, &vtysh_exit_ldpd_cmd);
        install_element(LDP_IPV4_IFACE_NODE, &vtysh_quit_ldpd_cmd);
        install_element(LDP_IPV6_IFACE_NODE, &vtysh_exit_ldpd_cmd);
index 67ee8898c98e779fb660c7542c55a1b5cf131003..bef4b82d3fb3f336f2bb0c48ca60284163973c61 100644 (file)
@@ -44,7 +44,7 @@ DECLARE_MGROUP(MVTYSH)
  * run on it (logging & co. should stay in a fixed/frozen config, and
  * things like prefix lists are not even initialised) */
 #define VTYSH_ALL        VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_LDPD|VTYSH_BGPD|VTYSH_ISISD|VTYSH_PIMD|VTYSH_NHRPD|VTYSH_EIGRPD|VTYSH_BABELD
-#define VTYSH_RMAP       VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD|VTYSH_PIMD
+#define VTYSH_RMAP       VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD|VTYSH_PIMD|VTYSH_EIGRPD
 #define VTYSH_INTERFACE          VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_ISISD|VTYSH_PIMD|VTYSH_NHRPD|VTYSH_EIGRPD|VTYSH_BABELD
 #define VTYSH_NS          VTYSH_ZEBRA
 #define VTYSH_VRF        VTYSH_ZEBRA
index 145df056896bbfc2fe750085d4ca946bc23cc8f1..d0a752853914a13a21905794ab31f4fbb4e6e294 100644 (file)
@@ -13,3 +13,4 @@ TAGS
 .arch-ids
 *~
 *.loT
+zebra_vty_clippy.c
index 46ecad5e4c0914e5fe4ab7839716c95f7851a186..67031ea361f134940bb49f7790d742c6fd67f6a1 100644 (file)
@@ -37,6 +37,8 @@ zebra_SOURCES = \
        zebra_vxlan.c \
        # end
 
+zebra_vty.o: zebra_vty_clippy.c
+
 noinst_HEADERS = \
        zebra_memory.h \
        connected.h ioctl.h rib.h rt.h zserv.h redistribute.h debug.h rtadv.h \
index dfee6b74c02088e6ed58aa8fd1a34fa8dfb4ed8f..6aedea1e397aec65e96fff1ed47cd653a1799f6a 100644 (file)
@@ -71,10 +71,10 @@ DEFUN (show_debugging_zebra,
                        "  Zebra kernel netlink message dumps (recv) are on\n");
 
        /* Check here using flags as the 'macro' does an OR */
-       if (CHECK_FLAG(zebra_debug_rib, ZEBRA_DEBUG_RIB))
-               vty_out(vty, "  Zebra RIB debugging is on\n");
        if (CHECK_FLAG(zebra_debug_rib, ZEBRA_DEBUG_RIB_DETAILED))
                vty_out(vty, "  Zebra RIB detailed debugging is on\n");
+       else if (CHECK_FLAG(zebra_debug_rib, ZEBRA_DEBUG_RIB))
+               vty_out(vty, "  Zebra RIB debugging is on\n");
 
        if (IS_ZEBRA_DEBUG_FPM)
                vty_out(vty, "  Zebra FPM debugging is on\n");
@@ -145,17 +145,16 @@ DEFUN (debug_zebra_packet,
 
        if (argv_find(argv, argc, "send", &idx))
                SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_SEND);
-       idx = 0;
-       if (argv_find(argv, argc, "recv", &idx))
+       else if (argv_find(argv, argc, "recv", &idx))
                SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_RECV);
-       idx = 0;
-       if (argv_find(argv, argc, "detail", &idx))
-               SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_DETAIL);
-
-       if (!(zebra_debug_packet & ZEBRA_DEBUG_SEND & ZEBRA_DEBUG_RECV)) {
+       else {
                SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_SEND);
                SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_RECV);
        }
+
+       if (argv_find(argv, argc, "detail", &idx))
+               SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_DETAIL);
+
        return CMD_SUCCESS;
 }
 
@@ -167,6 +166,13 @@ DEFUN (debug_zebra_kernel,
        "Debug option set for zebra between kernel interface\n")
 {
        SET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL);
+
+       if (IS_ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV)
+               UNSET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV);
+
+       if (IS_ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND)
+               UNSET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND);
+
        return CMD_SUCCESS;
 }
 
@@ -181,34 +187,41 @@ DEFUN (debug_zebra_kernel_msgdump,
        "Dump raw netlink messages sent\n")
 {
        int idx = 0;
-       if (argc == 4 || argv_find(argv, argc, "recv", &idx))
+
+       if (argv_find(argv, argc, "recv", &idx)) {
                SET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV);
-       if (argc == 4 || argv_find(argv, argc, "send", &idx))
+
+               if (IS_ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND)
+                       UNSET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND);
+
+       } else if (argv_find(argv, argc, "send", &idx)) {
                SET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND);
 
+               if (IS_ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV)
+                       UNSET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV);
+
+       } else {
+               SET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV);
+               SET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND);
+       }
+
        return CMD_SUCCESS;
 }
 
 DEFUN (debug_zebra_rib,
        debug_zebra_rib_cmd,
-       "debug zebra rib",
-       DEBUG_STR
-       "Zebra configuration\n"
-       "Debug RIB events\n")
-{
-       SET_FLAG(zebra_debug_rib, ZEBRA_DEBUG_RIB);
-       return CMD_SUCCESS;
-}
-
-DEFUN (debug_zebra_rib_detailed,
-       debug_zebra_rib_detailed_cmd,
-       "debug zebra rib detailed",
+       "debug zebra rib [detailed]",
        DEBUG_STR
        "Zebra configuration\n"
        "Debug RIB events\n"
        "Detailed debugs\n")
 {
-       SET_FLAG(zebra_debug_rib, ZEBRA_DEBUG_RIB_DETAILED);
+       int idx = 0;
+       SET_FLAG(zebra_debug_rib, ZEBRA_DEBUG_RIB);
+
+       if (argv_find(argv, argc, "detailed", &idx))
+               SET_FLAG(zebra_debug_rib, ZEBRA_DEBUG_RIB_DETAILED);
+
        return CMD_SUCCESS;
 }
 
@@ -273,19 +286,16 @@ DEFUN (no_debug_zebra_vxlan,
 
 DEFUN (no_debug_zebra_packet,
        no_debug_zebra_packet_cmd,
-       "no debug zebra packet [<recv|send>]",
+       "no debug zebra packet [<recv|send>] [detail]",
        NO_STR
        DEBUG_STR
        "Zebra configuration\n"
        "Debug option set for zebra packet\n"
        "Debug option set for receive packet\n"
-       "Debug option set for send packet\n")
+       "Debug option set for send packet\n"
+       "Debug option set for detailed info\n")
 {
-       int idx = 0;
-       if (argc == 4 || argv_find(argv, argc, "send", &idx))
-               UNSET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_SEND);
-       if (argc == 4 || argv_find(argv, argc, "recv", &idx))
-               UNSET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_RECV);
+       zebra_debug_packet = 0;
        return CMD_SUCCESS;
 }
 
@@ -297,7 +307,7 @@ DEFUN (no_debug_zebra_kernel,
        "Zebra configuration\n"
        "Debug option set for zebra between kernel interface\n")
 {
-       UNSET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL);
+       zebra_debug_kernel = 0;
        return CMD_SUCCESS;
 }
 
@@ -312,37 +322,20 @@ DEFUN (no_debug_zebra_kernel_msgdump,
        "Dump raw netlink messages received\n"
        "Dump raw netlink messages sent\n")
 {
-       int idx = 0;
-       if (argc == 5 || argv_find(argv, argc, "recv", &idx))
-               UNSET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV);
-       if (argc == 5 || argv_find(argv, argc, "send", &idx))
-               UNSET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND);
-
+       zebra_debug_kernel = 0;
        return CMD_SUCCESS;
 }
 
 DEFUN (no_debug_zebra_rib,
        no_debug_zebra_rib_cmd,
-       "no debug zebra rib",
-       NO_STR
-       DEBUG_STR
-       "Zebra configuration\n"
-       "Debug zebra RIB\n")
-{
-       zebra_debug_rib = 0;
-       return CMD_SUCCESS;
-}
-
-DEFUN (no_debug_zebra_rib_detailed,
-       no_debug_zebra_rib_detailed_cmd,
-       "no debug zebra rib detailed",
+       "no debug zebra rib [detailed]",
        NO_STR
        DEBUG_STR
        "Zebra configuration\n"
        "Debug zebra RIB\n"
        "Detailed debugs\n")
 {
-       UNSET_FLAG(zebra_debug_rib, ZEBRA_DEBUG_RIB_DETAILED);
+       zebra_debug_rib = 0;
        return CMD_SUCCESS;
 }
 
@@ -385,27 +378,31 @@ static int config_write_debug(struct vty *vty)
                        write++;
                }
        }
+
        if (IS_ZEBRA_DEBUG_KERNEL) {
-               vty_out(vty, "debug zebra kernel\n");
-               write++;
-       }
-       if (IS_ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV) {
-               vty_out(vty, "debug zebra kernel msgdump recv\n");
-               write++;
-       }
-       if (IS_ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND) {
-               vty_out(vty, "debug zebra kernel msgdump send\n");
-               write++;
-       }
-       /* Check here using flags as the 'macro' does an OR */
-       if (CHECK_FLAG(zebra_debug_rib, ZEBRA_DEBUG_RIB)) {
-               vty_out(vty, "debug zebra rib\n");
-               write++;
+               if (IS_ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND && IS_ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV) {
+                       vty_out(vty, "debug zebra kernel msgdump\n");
+                       write++;
+               } else if (IS_ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV) {
+                       vty_out(vty, "debug zebra kernel msgdump recv\n");
+                       write++;
+               } else if (IS_ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND) {
+                       vty_out(vty, "debug zebra kernel msgdump send\n");
+                       write++;
+               } else {
+                       vty_out(vty, "debug zebra kernel\n");
+                       write++;
+               }
        }
+
        if (CHECK_FLAG(zebra_debug_rib, ZEBRA_DEBUG_RIB_DETAILED)) {
                vty_out(vty, "debug zebra rib detailed\n");
                write++;
+       } else if (CHECK_FLAG(zebra_debug_rib, ZEBRA_DEBUG_RIB)) {
+               vty_out(vty, "debug zebra rib\n");
+               write++;
        }
+
        if (IS_ZEBRA_DEBUG_FPM) {
                vty_out(vty, "debug zebra fpm\n");
                write++;
@@ -447,7 +444,6 @@ void zebra_debug_init(void)
        install_element(ENABLE_NODE, &debug_zebra_kernel_cmd);
        install_element(ENABLE_NODE, &debug_zebra_kernel_msgdump_cmd);
        install_element(ENABLE_NODE, &debug_zebra_rib_cmd);
-       install_element(ENABLE_NODE, &debug_zebra_rib_detailed_cmd);
        install_element(ENABLE_NODE, &debug_zebra_fpm_cmd);
        install_element(ENABLE_NODE, &no_debug_zebra_events_cmd);
        install_element(ENABLE_NODE, &no_debug_zebra_nht_cmd);
@@ -457,7 +453,6 @@ void zebra_debug_init(void)
        install_element(ENABLE_NODE, &no_debug_zebra_kernel_cmd);
        install_element(ENABLE_NODE, &no_debug_zebra_kernel_msgdump_cmd);
        install_element(ENABLE_NODE, &no_debug_zebra_rib_cmd);
-       install_element(ENABLE_NODE, &no_debug_zebra_rib_detailed_cmd);
        install_element(ENABLE_NODE, &no_debug_zebra_fpm_cmd);
 
        install_element(CONFIG_NODE, &debug_zebra_events_cmd);
@@ -468,7 +463,6 @@ void zebra_debug_init(void)
        install_element(CONFIG_NODE, &debug_zebra_kernel_cmd);
        install_element(CONFIG_NODE, &debug_zebra_kernel_msgdump_cmd);
        install_element(CONFIG_NODE, &debug_zebra_rib_cmd);
-       install_element(CONFIG_NODE, &debug_zebra_rib_detailed_cmd);
        install_element(CONFIG_NODE, &debug_zebra_fpm_cmd);
        install_element(CONFIG_NODE, &no_debug_zebra_events_cmd);
        install_element(CONFIG_NODE, &no_debug_zebra_nht_cmd);
@@ -478,6 +472,5 @@ void zebra_debug_init(void)
        install_element(CONFIG_NODE, &no_debug_zebra_kernel_cmd);
        install_element(CONFIG_NODE, &no_debug_zebra_kernel_msgdump_cmd);
        install_element(CONFIG_NODE, &no_debug_zebra_rib_cmd);
-       install_element(CONFIG_NODE, &no_debug_zebra_rib_detailed_cmd);
        install_element(CONFIG_NODE, &no_debug_zebra_fpm_cmd);
 }
index d38fe7c30657db685cb015dac7ad865bb10f4cd8..fce36ebc1d4af60df3a8b61f45e6ecd4bc38f763 100644 (file)
@@ -119,7 +119,7 @@ calculate_lifc_len: /* must hold privileges to enter here */
        if (ret < 0) {
                if (errno == EINVAL)
                        goto calculate_lifc_len; /* deliberately hold privileges
-                                                 */
+                                                   */
 
                zlog_warn("SIOCGLIFCONF: %s", safe_strerror(errno));
 
index 4bce42f22b3886e4ba1ecb4dacd949571667db79..03ddf8d3864a73f106b136c90e31b78d7dfac73b 100644 (file)
@@ -429,7 +429,7 @@ static void if_addr_wakeup(struct interface *ifp)
                                         * XXX: RUNNING is not a settable flag
                                         * on any system
                                         * I (paulj) am aware of.
-                                        */
+                                       */
                                        if_set_flags(ifp, IFF_UP | IFF_RUNNING);
                                        if_refresh(ifp);
                                }
@@ -1757,9 +1757,7 @@ DEFUN (no_bandwidth_if,
 
 
 struct cmd_node link_params_node = {
-       LINK_PARAMS_NODE,
-       "%s(config-link-params)# ",
-       1,
+       LINK_PARAMS_NODE, "%s(config-link-params)# ", 1,
 };
 
 static void link_param_cmd_set_uint32(struct interface *ifp, uint32_t *field,
index 58c61c2c1131e9af45496187f7fe2926f82369c2..ea722646968734db70acbdab0004b84c3781c0ed 100644 (file)
@@ -172,10 +172,11 @@ struct rtadvconf {
        int DefaultPreference;
 #define RTADV_PREF_MEDIUM 0x0 /* Per RFC4191. */
 
-       u_char inFastRexmit;      /* True if we're rexmits faster than usual */
-       u_char configured;      /* Has operator configured RA? */
-       int NumFastReXmitsRemain; /* Loaded first with number of fast
-                                    rexmits to do */
+       u_char inFastRexmit; /* True if we're rexmits faster than usual */
+       u_char configured;   /* Has operator configured RA? */
+       int
+               NumFastReXmitsRemain; /* Loaded first with number of fast
+                                        rexmits to do */
 
 #define RTADV_FAST_REXMIT_PERIOD 1 /* 1 sec */
 #define RTADV_NUM_FAST_REXMITS   4 /* Fast Rexmit RA 4 times on certain events */
index 8a5bc6952160e1f58cc7d87142dc87900bc16708..7fc2d613328c2f20cf9b507de197f5b2f25ea355 100644 (file)
@@ -307,8 +307,7 @@ static void netlink_install_filter(int sock, __u32 pid)
        };
 
        struct sock_fprog prog = {
-               .len = array_size(filter),
-               .filter = filter,
+               .len = array_size(filter), .filter = filter,
        };
 
        if (setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER, &prog, sizeof(prog))
index 2484d81832598bccca07c3d7fe2cbab7be0bdc3d..4b63a3eb04b445273c1ddace96b0427e58ad653a 100644 (file)
@@ -315,9 +315,8 @@ static int ifan_read(struct if_announcemsghdr *ifan)
                assert((ifp->ifindex == ifan->ifan_index)
                       || (ifp->ifindex == IFINDEX_INTERNAL));
 
-       if ((ifp == NULL)
-           || ((ifp->ifindex == IFINDEX_INTERNAL)
-               && (ifan->ifan_what == IFAN_ARRIVAL))) {
+       if ((ifp == NULL) || ((ifp->ifindex == IFINDEX_INTERNAL)
+                             && (ifan->ifan_what == IFAN_ARRIVAL))) {
                if (IS_ZEBRA_DEBUG_KERNEL)
                        zlog_debug(
                                "%s: creating interface for ifindex %d, name %s",
@@ -945,7 +944,7 @@ void rtm_read(struct rt_msghdr *rtm)
                                                buf, gate_buf);
                                        break;
                                case ZEBRA_RIB_FOUND_EXACT: /* RIB RR == FIB RR
-                                                            */
+                                                              */
                                        zlog_debug(
                                                "%s: %s %s: done Ok", __func__,
                                                lookup_msg(rtm_type_str,
index b9a3bf881a0689b08f64862f8be6b172107d3c5f..27a6f3e02762974deb37867aa9fb11ef6e400cd7 100644 (file)
@@ -89,9 +89,7 @@ struct option longopts[] = {{"batch", no_argument, NULL, 'b'},
                            {0}};
 
 zebra_capabilities_t _caps_p[] = {
-       ZCAP_NET_ADMIN,
-       ZCAP_SYS_ADMIN,
-       ZCAP_NET_RAW,
+       ZCAP_NET_ADMIN, ZCAP_SYS_ADMIN, ZCAP_NET_RAW,
 };
 
 /* zebra privileges to run with */
@@ -226,7 +224,7 @@ int main(int argc, char **argv)
 #ifdef HAVE_NETLINK
                "  -s, --nl-bufsize   Set netlink receive buffer size\n"
 #endif /* HAVE_NETLINK */
-       );
+               );
 
        while (1) {
                int opt = frr_getopt(argc, argv, NULL);
@@ -310,25 +308,25 @@ int main(int argc, char **argv)
        zebra_ns_init();
 
        /* Process the configuration file. Among other configuration
-        *  directives we can meet those installing static routes. Such
-        *  requests will not be executed immediately, but queued in
-        *  zebra->ribq structure until we enter the main execution loop.
-        *  The notifications from kernel will show originating PID equal
-        *  to that after daemon() completes (if ever called).
-        */
+       *  directives we can meet those installing static routes. Such
+       *  requests will not be executed immediately, but queued in
+       *  zebra->ribq structure until we enter the main execution loop.
+       *  The notifications from kernel will show originating PID equal
+       *  to that after daemon() completes (if ever called).
+       */
        frr_config_fork();
 
        /* Clean up rib -- before fork (?) */
        /* rib_weed_tables (); */
 
        /* After we have successfully acquired the pidfile, we can be sure
-        *  about being the only copy of zebra process, which is submitting
-        *  changes to the FIB.
-        *  Clean up zebra-originated routes. The requests will be sent to OS
-        *  immediately, so originating PID in notifications from kernel
-        *  will be equal to the current getpid(). To know about such routes,
-        * we have to have route_read() called before.
-        */
+       *  about being the only copy of zebra process, which is submitting
+       *  changes to the FIB.
+       *  Clean up zebra-originated routes. The requests will be sent to OS
+       *  immediately, so originating PID in notifications from kernel
+       *  will be equal to the current getpid(). To know about such routes,
+       * we have to have route_read() called before.
+       */
        if (!keep_kernel_mode)
                rib_sweep_route();
 
index a7679cb830867f1baa87628f69b74f841b467174..b8cf2d490afbe2a269c1e9969fb629c765a5bfe8 100644 (file)
@@ -263,7 +263,7 @@ static void rtadv_send_packet(int sock, struct interface *ifp)
                                                                      for RL,
                                                                      but not
                                                                      for HAL*/
-                       );
+                             );
                len += sizeof(struct nd_opt_homeagent_info);
        }
 
@@ -1274,9 +1274,8 @@ DEFUN (ipv6_nd_prefix,
 {
        /* prelude */
        char *prefix = argv[3]->arg;
-       int lifetimes = (argc > 4)
-                       && (argv[4]->type == RANGE_TKN
-                           || strmatch(argv[4]->text, "infinite"));
+       int lifetimes = (argc > 4) && (argv[4]->type == RANGE_TKN
+                                      || strmatch(argv[4]->text, "infinite"));
        int routeropts = lifetimes ? argc > 6 : argc > 4;
 
        int idx_routeropts = routeropts ? (lifetimes ? 6 : 4) : 0;
index 0d0c5aaf2295a3eeaa58ac2c1825239543eac924..d9bbcfed6fc48c344161e45540f421521980aa08 100644 (file)
@@ -67,6 +67,7 @@ union zebra_l2if_info {
 
 #define IS_ZEBRA_IF_BRIDGE_VLAN_AWARE(zif) ((zif)->l2info.br.vlan_aware == 1)
 
+
 extern void zebra_l2_map_slave_to_bridge(struct zebra_l2info_brslave *br_slave);
 extern void
 zebra_l2_unmap_slave_from_bridge(struct zebra_l2info_brslave *br_slave);
index cb1c80923d666eb10032e16fc49059549d25fca6..e44e5d2e6b52895c439fabba95f7954d49ef14c1 100644 (file)
@@ -1965,7 +1965,7 @@ int zebra_mpls_label_already_bound(struct zebra_vrf *zvrf, mpls_label_t label)
  * Add static FEC to label binding. If there are clients registered for this
  * FEC, notify them. If there are labeled routes for this FEC, install the
  * label forwarding entry.
- */
+*/
 int zebra_mpls_static_fec_add(struct zebra_vrf *zvrf, struct prefix *p,
                              mpls_label_t in_label)
 {
@@ -2639,9 +2639,8 @@ void zebra_mpls_print_lsp(struct vty *vty, struct zebra_vrf *zvrf,
 
        if (use_json) {
                json = lsp_json(lsp);
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else
                lsp_print(lsp, (void *)vty);
@@ -2669,9 +2668,8 @@ void zebra_mpls_print_lsp_table(struct vty *vty, struct zebra_vrf *zvrf,
                                json, label2str(lsp->ile.in_label, buf, BUFSIZ),
                                lsp_json(lsp));
 
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        } else {
                vty_out(vty, " Inbound                            Outbound\n");
index ed34831f8f30324a5825a9198d5d66c1da7b7ca1..9d100bb7d0b3a1f560925a5e7f6992c1b7d85129 100644 (file)
@@ -283,570 +283,6 @@ DEFUN (no_mpls_label_bind,
        return zebra_mpls_bind(vty, 0, argv[4]->arg, NULL);
 }
 
-/* Static route configuration.  */
-DEFUN (ip_route_label,
-       ip_route_label_cmd,
-       "ip route A.B.C.D/M <A.B.C.D|INTERFACE|null0> label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[2]->arg, NULL,
-                                argv[3]->arg, NULL, NULL, NULL, NULL,
-                                argv[5]->arg);
-}
-
-DEFUN (ip_route_tag_label,
-       ip_route_tag_label_cmd,
-       "ip route A.B.C.D/M <A.B.C.D|INTERFACE|null0> tag (1-4294967295) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[2]->arg, NULL,
-                                argv[3]->arg, NULL, argv[5]->arg, NULL, NULL,
-                                argv[7]->arg);
-}
-
-/* Mask as A.B.C.D format.  */
-DEFUN (ip_route_mask_label,
-       ip_route_mask_label_cmd,
-       "ip route A.B.C.D A.B.C.D <A.B.C.D|INTERFACE|null0> label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix\n"
-       "IP destination prefix mask\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[2]->arg,
-                                argv[3]->arg, argv[4]->arg, NULL, NULL, NULL,
-                                NULL, argv[6]->arg);
-}
-
-DEFUN (ip_route_mask_tag_label,
-       ip_route_mask_tag_label_cmd,
-       "ip route A.B.C.D A.B.C.D <A.B.C.D|INTERFACE|null0> tag (1-4294967295) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix\n"
-       "IP destination prefix mask\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[2]->arg,
-                                argv[3]->arg, argv[4]->arg, NULL, argv[6]->arg,
-                                NULL, NULL, argv[8]->arg);
-}
-
-/* Distance option value.  */
-DEFUN (ip_route_distance_label,
-       ip_route_distance_label_cmd,
-       "ip route A.B.C.D/M <A.B.C.D|INTERFACE|null0> (1-255) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Distance value for this route\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[2]->arg, NULL,
-                                argv[3]->arg, NULL, NULL, argv[4]->arg, NULL,
-                                argv[6]->arg);
-}
-
-DEFUN (ip_route_tag_distance_label,
-       ip_route_tag_distance_label_cmd,
-       "ip route A.B.C.D/M <A.B.C.D|INTERFACE|null0> tag (1-4294967295) (1-255) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this route\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[2]->arg, NULL,
-                                argv[3]->arg, NULL, argv[5]->arg, argv[6]->arg,
-                                NULL, argv[8]->arg);
-}
-
-DEFUN (ip_route_mask_distance_label,
-       ip_route_mask_distance_label_cmd,
-       "ip route A.B.C.D A.B.C.D <A.B.C.D|INTERFACE|null0> (1-255) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix\n"
-       "IP destination prefix mask\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Distance value for this route\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[2]->arg,
-                                argv[3]->arg, argv[4]->arg, NULL, NULL,
-                                argv[5]->arg, NULL, argv[7]->arg);
-}
-
-DEFUN (ip_route_mask_tag_distance_label,
-       ip_route_mask_tag_distance_label_cmd,
-       "ip route A.B.C.D A.B.C.D <A.B.C.D|INTERFACE|null0> tag (1-4294967295) (1-255) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix\n"
-       "IP destination prefix mask\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this route\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[2]->arg,
-                                argv[3]->arg, argv[4]->arg, NULL, argv[6]->arg,
-                                argv[7]->arg, NULL, argv[9]->arg);
-}
-
-DEFUN (no_ip_route_label,
-       no_ip_route_label_cmd,
-       "no ip route A.B.C.D/M <A.B.C.D|INTERFACE|null0> label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[3]->arg, NULL,
-                                argv[4]->arg, NULL, NULL, NULL, NULL,
-                                argv[6]->arg);
-}
-
-DEFUN (no_ip_route_tag_label,
-       no_ip_route_tag_label_cmd,
-       "no ip route A.B.C.D/M <A.B.C.D|INTERFACE|null0> tag (1-4294967295) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Tag of this route\n"
-       "Tag value\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[3]->arg, NULL,
-                                argv[4]->arg, NULL, argv[6]->arg, NULL, NULL,
-                                argv[8]->arg);
-}
-
-DEFUN (no_ip_route_mask_label,
-       no_ip_route_mask_label_cmd,
-       "no ip route A.B.C.D A.B.C.D <A.B.C.D|INTERFACE|null0> label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix\n"
-       "IP destination prefix mask\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[3]->arg,
-                                argv[4]->arg, argv[5]->arg, NULL, NULL, NULL,
-                                NULL, argv[7]->arg);
-}
-
-DEFUN (no_ip_route_mask_tag_label,
-       no_ip_route_mask_tag_label_cmd,
-       "no ip route A.B.C.D A.B.C.D <A.B.C.D|INTERFACE|null0> tag (1-4294967295) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix\n"
-       "IP destination prefix mask\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Tag of this route\n"
-       "Tag value\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[3]->arg,
-                                argv[4]->arg, argv[5]->arg, NULL, argv[7]->arg,
-                                NULL, NULL, argv[9]->arg);
-}
-
-DEFUN (no_ip_route_distance_label,
-       no_ip_route_distance_label_cmd,
-       "no ip route A.B.C.D/M <A.B.C.D|INTERFACE|null0> (1-255) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Distance value for this route\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[3]->arg, NULL,
-                                argv[4]->arg, NULL, NULL, argv[5]->arg, NULL,
-                                argv[7]->arg);
-}
-
-DEFUN (no_ip_route_tag_distance_label,
-       no_ip_route_tag_distance_label_cmd,
-       "no ip route A.B.C.D/M <A.B.C.D|INTERFACE|null0> tag (1-4294967295) (1-255) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Tag of this route\n"
-       "Tag value\n"
-       "Distance value for this route\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[3]->arg, NULL,
-                                argv[4]->arg, NULL, argv[6]->arg, argv[7]->arg,
-                                NULL, argv[9]->arg);
-}
-
-DEFUN (no_ip_route_mask_distance_label,
-       no_ip_route_mask_distance_label_cmd,
-       "no ip route A.B.C.D A.B.C.D <A.B.C.D|INTERFACE|null0> (1-255) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix\n"
-       "IP destination prefix mask\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Distance value for this route\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[3]->arg,
-                                argv[4]->arg, argv[5]->arg, NULL, NULL,
-                                argv[6]->arg, NULL, argv[8]->arg);
-}
-
-DEFUN (no_ip_route_mask_tag_distance_label,
-       no_ip_route_mask_tag_distance_label_cmd,
-       "no ip route A.B.C.D A.B.C.D <A.B.C.D|INTERFACE|null0> tag (1-4294967295) (1-255) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix\n"
-       "IP destination prefix mask\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Tag of this route\n"
-       "Tag value\n"
-       "Distance value for this route\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[3]->arg,
-                                argv[4]->arg, argv[5]->arg, NULL, argv[7]->arg,
-                                argv[8]->arg, NULL, argv[10]->arg);
-}
-
-DEFUN (ipv6_route_label,
-       ipv6_route_label_cmd,
-       "ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 1, argv[2]->arg, NULL, argv[3]->arg, NULL,
-                               NULL, NULL, NULL, NULL, argv[5]->arg);
-}
-
-DEFUN (ipv6_route_tag_label,
-       ipv6_route_tag_label_cmd,
-       "ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> tag (1-4294967295) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 1, argv[2]->arg, NULL, argv[3]->arg, NULL,
-                               NULL, argv[5]->arg, NULL, NULL, argv[7]->arg);
-}
-
-DEFUN (ipv6_route_ifname_label,
-       ipv6_route_ifname_label_cmd,
-       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 1, argv[2]->arg, NULL, argv[3]->arg,
-                               argv[4]->arg, NULL, NULL, NULL, NULL,
-                               argv[6]->arg);
-}
-DEFUN (ipv6_route_ifname_tag_label,
-       ipv6_route_ifname_tag_label_cmd,
-       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag (1-4294967295) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 1, argv[2]->arg, NULL, argv[3]->arg,
-                               argv[4]->arg, NULL, argv[6]->arg, NULL, NULL,
-                               argv[8]->arg);
-}
-
-DEFUN (ipv6_route_pref_label,
-       ipv6_route_pref_label_cmd,
-       "ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> (1-255) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Distance value for this prefix\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 1, argv[2]->arg, NULL, argv[3]->arg, NULL,
-                               NULL, NULL, argv[4]->arg, NULL, argv[6]->arg);
-}
-
-DEFUN (ipv6_route_pref_tag_label,
-       ipv6_route_pref_tag_label_cmd,
-       "ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> tag (1-4294967295) (1-255) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 1, argv[2]->arg, NULL, argv[3]->arg, NULL,
-                               NULL, argv[5]->arg, argv[6]->arg, NULL,
-                               argv[8]->arg);
-}
-
-DEFUN (ipv6_route_ifname_pref_label,
-       ipv6_route_ifname_pref_label_cmd,
-       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (1-255) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Distance value for this prefix\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 1, argv[2]->arg, NULL, argv[3]->arg,
-                               argv[4]->arg, NULL, NULL, argv[5]->arg, NULL,
-                               argv[7]->arg);
-}
-
-DEFUN (ipv6_route_ifname_pref_tag_label,
-       ipv6_route_ifname_pref_tag_label_cmd,
-       "ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag (1-4294967295) (1-255) label WORD",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 1, argv[2]->arg, NULL, argv[3]->arg,
-                               argv[4]->arg, NULL, argv[6]->arg, argv[7]->arg,
-                               NULL, argv[9]->arg);
-}
-
-DEFUN (no_ipv6_route_label,
-       no_ipv6_route_label_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 0, argv[3]->arg, NULL, argv[4]->arg, NULL,
-                               NULL, NULL, NULL, NULL, argv[6]->arg);
-}
-
-DEFUN (no_ipv6_route_tag_label,
-       no_ipv6_route_tag_label_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> tag (1-4294967295) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 0, argv[3]->arg, NULL, argv[4]->arg, NULL,
-                               NULL, argv[6]->arg, NULL, NULL, argv[8]->arg);
-}
-
-DEFUN (no_ipv6_route_ifname_label,
-       no_ipv6_route_ifname_label_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 0, argv[3]->arg, NULL, argv[4]->arg,
-                               argv[5]->arg, NULL, NULL, NULL, NULL,
-                               argv[7]->arg);
-}
-
-DEFUN (no_ipv6_route_ifname_tag_label,
-       no_ipv6_route_ifname_tag_label_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag (1-4294967295) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 0, argv[3]->arg, NULL, argv[4]->arg,
-                               argv[5]->arg, NULL, argv[7]->arg, NULL, NULL,
-                               argv[9]->arg);
-}
-
-DEFUN (no_ipv6_route_pref_label,
-       no_ipv6_route_pref_label_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> (1-255) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Distance value for this prefix\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 0, argv[3]->arg, NULL, argv[4]->arg, NULL,
-                               NULL, NULL, argv[5]->arg, NULL, argv[7]->arg);
-}
-
-DEFUN (no_ipv6_route_pref_tag_label,
-       no_ipv6_route_pref_tag_label_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> tag (1-4294967295) (1-255) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 0, argv[3]->arg, NULL, argv[4]->arg, NULL,
-                               NULL, argv[6]->arg, argv[7]->arg, NULL,
-                               argv[9]->arg);
-}
-
-DEFUN (no_ipv6_route_ifname_pref_label,
-       no_ipv6_route_ifname_pref_label_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (1-255) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Distance value for this prefix\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 0, argv[3]->arg, NULL, argv[4]->arg,
-                               argv[5]->arg, NULL, NULL, argv[6]->arg, NULL,
-                               argv[8]->arg);
-}
-
-DEFUN (no_ipv6_route_ifname_pref_tag_label,
-       no_ipv6_route_ifname_pref_tag_label_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag (1-4294967295) (1-255) label WORD",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       MPLS_LABEL_HELPSTR)
-{
-       return static_ipv6_func(vty, 0, argv[3]->arg, NULL, argv[4]->arg,
-                               argv[5]->arg, NULL, argv[7]->arg, argv[8]->arg,
-                               NULL, argv[10]->arg);
-}
-
 /* MPLS LSP configuration write function. */
 static int zebra_mpls_config(struct vty *vty)
 {
@@ -1024,44 +460,11 @@ void zebra_mpls_vty_init(void)
 
        install_node(&mpls_node, zebra_mpls_config);
 
-       install_element(CONFIG_NODE, &ip_route_label_cmd);
-       install_element(CONFIG_NODE, &ip_route_tag_label_cmd);
-       install_element(CONFIG_NODE, &ip_route_mask_label_cmd);
-       install_element(CONFIG_NODE, &ip_route_mask_tag_label_cmd);
-       install_element(CONFIG_NODE, &no_ip_route_label_cmd);
-       install_element(CONFIG_NODE, &no_ip_route_tag_label_cmd);
-       install_element(CONFIG_NODE, &no_ip_route_mask_label_cmd);
-       install_element(CONFIG_NODE, &no_ip_route_mask_tag_label_cmd);
-       install_element(CONFIG_NODE, &ip_route_distance_label_cmd);
-       install_element(CONFIG_NODE, &ip_route_tag_distance_label_cmd);
-       install_element(CONFIG_NODE, &ip_route_mask_distance_label_cmd);
-       install_element(CONFIG_NODE, &ip_route_mask_tag_distance_label_cmd);
-       install_element(CONFIG_NODE, &no_ip_route_distance_label_cmd);
-       install_element(CONFIG_NODE, &no_ip_route_tag_distance_label_cmd);
-       install_element(CONFIG_NODE, &no_ip_route_mask_distance_label_cmd);
-       install_element(CONFIG_NODE, &no_ip_route_mask_tag_distance_label_cmd);
-
-       install_element(CONFIG_NODE, &ipv6_route_label_cmd);
-       install_element(CONFIG_NODE, &ipv6_route_ifname_label_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_label_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_ifname_label_cmd);
-       install_element(CONFIG_NODE, &ipv6_route_pref_label_cmd);
-       install_element(CONFIG_NODE, &ipv6_route_ifname_pref_label_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_pref_label_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_ifname_pref_label_cmd);
-       install_element(CONFIG_NODE, &ipv6_route_tag_label_cmd);
-       install_element(CONFIG_NODE, &ipv6_route_ifname_tag_label_cmd);
-       install_element(CONFIG_NODE, &ipv6_route_pref_tag_label_cmd);
-       install_element(CONFIG_NODE, &ipv6_route_ifname_pref_tag_label_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_tag_label_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_ifname_tag_label_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_pref_tag_label_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_ifname_pref_tag_label_cmd);
-
        install_element(CONFIG_NODE, &mpls_transit_lsp_cmd);
        install_element(CONFIG_NODE, &no_mpls_transit_lsp_cmd);
        install_element(CONFIG_NODE, &no_mpls_transit_lsp_out_label_cmd);
        install_element(CONFIG_NODE, &no_mpls_transit_lsp_all_cmd);
+
        install_element(CONFIG_NODE, &mpls_label_bind_cmd);
        install_element(CONFIG_NODE, &no_mpls_label_bind_cmd);
 
index 0c79d773a8284b8d7b3c4d603f86476537fb5402..1bf672d4a1cb3bc3d25c66273c41b80edf0af4d8 100644 (file)
@@ -267,9 +267,8 @@ DEFUN (zebra_ptm_enable,
        for (ALL_LIST_ELEMENTS_RO(vrf->iflist, i, ifp))
                if (!ifp->ptm_enable) {
                        if_data = (struct zebra_if *)ifp->info;
-                       if (if_data
-                           && (if_data->ptm_enable
-                               == ZEBRA_IF_PTM_ENABLE_UNSPEC)) {
+                       if (if_data && (if_data->ptm_enable
+                                       == ZEBRA_IF_PTM_ENABLE_UNSPEC)) {
                                ifp->ptm_enable = ZEBRA_IF_PTM_ENABLE_ON;
                        }
                        /* Assign a default unknown status */
index c72e2900326a52169da3a9d9b2293b9eec9fc406..98508aaa89efbf6413cadf39df1efc0671a7f9b0 100644 (file)
@@ -68,17 +68,17 @@ static const struct {
        int key;
        int distance;
 } route_info[ZEBRA_ROUTE_MAX] = {
-       [ZEBRA_ROUTE_SYSTEM] = {ZEBRA_ROUTE_SYSTEM, 0},
-       [ZEBRA_ROUTE_KERNEL] = {ZEBRA_ROUTE_KERNEL, 0},
-       [ZEBRA_ROUTE_CONNECT] = {ZEBRA_ROUTE_CONNECT, 0},
-       [ZEBRA_ROUTE_STATIC] = {ZEBRA_ROUTE_STATIC, 1},
-       [ZEBRA_ROUTE_RIP] = {ZEBRA_ROUTE_RIP, 120},
-       [ZEBRA_ROUTE_RIPNG] = {ZEBRA_ROUTE_RIPNG, 120},
-       [ZEBRA_ROUTE_OSPF] = {ZEBRA_ROUTE_OSPF, 110},
-       [ZEBRA_ROUTE_OSPF6] = {ZEBRA_ROUTE_OSPF6, 110},
-       [ZEBRA_ROUTE_ISIS] = {ZEBRA_ROUTE_ISIS, 115},
-       [ZEBRA_ROUTE_BGP] = {ZEBRA_ROUTE_BGP, 20 /* IBGP is 200. */},
-       [ZEBRA_ROUTE_NHRP] = {ZEBRA_ROUTE_NHRP, 10},
+               [ZEBRA_ROUTE_SYSTEM] = {ZEBRA_ROUTE_SYSTEM, 0},
+               [ZEBRA_ROUTE_KERNEL] = {ZEBRA_ROUTE_KERNEL, 0},
+               [ZEBRA_ROUTE_CONNECT] = {ZEBRA_ROUTE_CONNECT, 0},
+               [ZEBRA_ROUTE_STATIC] = {ZEBRA_ROUTE_STATIC, 1},
+               [ZEBRA_ROUTE_RIP] = {ZEBRA_ROUTE_RIP, 120},
+               [ZEBRA_ROUTE_RIPNG] = {ZEBRA_ROUTE_RIPNG, 120},
+               [ZEBRA_ROUTE_OSPF] = {ZEBRA_ROUTE_OSPF, 110},
+               [ZEBRA_ROUTE_OSPF6] = {ZEBRA_ROUTE_OSPF6, 110},
+               [ZEBRA_ROUTE_ISIS] = {ZEBRA_ROUTE_ISIS, 115},
+               [ZEBRA_ROUTE_BGP] = {ZEBRA_ROUTE_BGP, 20 /* IBGP is 200. */},
+               [ZEBRA_ROUTE_NHRP] = {ZEBRA_ROUTE_NHRP, 10},
        /* no entry/default: 150 */
 };
 
@@ -1551,9 +1551,8 @@ static void rib_process(struct route_node *rn)
 
        /* Buffer ROUTE_ENTRY_CHANGED here, because it will get cleared if
         * fib == selected */
-       bool selected_changed =
-               new_selected
-               && CHECK_FLAG(new_selected->status, ROUTE_ENTRY_CHANGED);
+       bool selected_changed = new_selected && CHECK_FLAG(new_selected->status,
+                                                          ROUTE_ENTRY_CHANGED);
 
        /* Update fib according to selection results */
        if (new_fib && old_fib)
@@ -1726,30 +1725,30 @@ static wq_item_status meta_queue_process(struct work_queue *dummy, void *data)
  * Map from rib types to queue type (priority) in meta queue
  */
 static const u_char meta_queue_map[ZEBRA_ROUTE_MAX] = {
-       [ZEBRA_ROUTE_SYSTEM] = 4,
-       [ZEBRA_ROUTE_KERNEL] = 0,
-       [ZEBRA_ROUTE_CONNECT] = 0,
-       [ZEBRA_ROUTE_STATIC] = 1,
-       [ZEBRA_ROUTE_RIP] = 2,
-       [ZEBRA_ROUTE_RIPNG] = 2,
-       [ZEBRA_ROUTE_OSPF] = 2,
-       [ZEBRA_ROUTE_OSPF6] = 2,
-       [ZEBRA_ROUTE_ISIS] = 2,
-       [ZEBRA_ROUTE_BGP] = 3,
-       [ZEBRA_ROUTE_PIM] = 4, // Shouldn't happen but for safety
-       [ZEBRA_ROUTE_EIGRP] = 2,
-       [ZEBRA_ROUTE_NHRP] = 2,
-       [ZEBRA_ROUTE_HSLS] = 4,
-       [ZEBRA_ROUTE_OLSR] = 4,
-       [ZEBRA_ROUTE_TABLE] = 1,
-       [ZEBRA_ROUTE_LDP] = 4,
-       [ZEBRA_ROUTE_VNC] = 3,
-       [ZEBRA_ROUTE_VNC_DIRECT] = 3,
-       [ZEBRA_ROUTE_VNC_DIRECT_RH] = 3,
-       [ZEBRA_ROUTE_BGP_DIRECT] = 3,
-       [ZEBRA_ROUTE_BGP_DIRECT_EXT] = 3,
-       [ZEBRA_ROUTE_BABEL] = 2,
-       [ZEBRA_ROUTE_ALL] = 4, // Shouldn't happen but for safety
+               [ZEBRA_ROUTE_SYSTEM] = 4,
+               [ZEBRA_ROUTE_KERNEL] = 0,
+               [ZEBRA_ROUTE_CONNECT] = 0,
+               [ZEBRA_ROUTE_STATIC] = 1,
+               [ZEBRA_ROUTE_RIP] = 2,
+               [ZEBRA_ROUTE_RIPNG] = 2,
+               [ZEBRA_ROUTE_OSPF] = 2,
+               [ZEBRA_ROUTE_OSPF6] = 2,
+               [ZEBRA_ROUTE_ISIS] = 2,
+               [ZEBRA_ROUTE_BGP] = 3,
+               [ZEBRA_ROUTE_PIM] = 4, // Shouldn't happen but for safety
+               [ZEBRA_ROUTE_EIGRP] = 2,
+               [ZEBRA_ROUTE_NHRP] = 2,
+               [ZEBRA_ROUTE_HSLS] = 4,
+               [ZEBRA_ROUTE_OLSR] = 4,
+               [ZEBRA_ROUTE_TABLE] = 1,
+               [ZEBRA_ROUTE_LDP] = 4,
+               [ZEBRA_ROUTE_VNC] = 3,
+               [ZEBRA_ROUTE_VNC_DIRECT] = 3,
+               [ZEBRA_ROUTE_VNC_DIRECT_RH] = 3,
+               [ZEBRA_ROUTE_BGP_DIRECT] = 3,
+               [ZEBRA_ROUTE_BGP_DIRECT_EXT] = 3,
+               [ZEBRA_ROUTE_BABEL] = 2,
+               [ZEBRA_ROUTE_ALL] = 4, // Shouldn't happen but for safety
 };
 
 /* Look into the RN and queue it into one or more priority queues,
@@ -2396,7 +2395,7 @@ void rib_delete(afi_t afi, safi_t safi, vrf_id_t vrf_id, int type,
                                                        family2afi(afi), gate,
                                                        buf2,
                                                        INET_ADDRSTRLEN), /* FIXME
-                                                                          */
+                                                                            */
                                                ifindex, type);
                                else
                                        rnode_debug(
index f769a273eb1294d09da0048d602f5b86ebaa0e0d..f8d89ec8ca89fe2780e44734033a09264b012dc0 100644 (file)
@@ -39,12 +39,12 @@ struct rnh {
        struct route_entry *state;
        struct prefix resolved_route;
        struct list *client_list;
-       struct list
-               *zebra_static_route_list; /* static routes dependent on this NH
-                                          */
+       struct list *
+               zebra_static_route_list; /* static routes dependent on this NH
+                                           */
        struct route_node *node;
        int filtered[ZEBRA_ROUTE_MAX]; /* if this has been filtered for client
-                                       */
+                                         */
 };
 
 typedef enum { RNH_NEXTHOP_TYPE, RNH_IMPORT_CHECK_TYPE } rnh_type_t;
index 2b209613d4a9eb0df53d87fb055ba6d2461520c7..0176b36840a8c351d5b0d707ee895231f8cb0ed1 100644 (file)
@@ -148,9 +148,7 @@ static route_map_result_t route_match_tag(void *rule, struct prefix *prefix,
 
 /* Route map commands for tag matching */
 static struct route_map_rule_cmd route_match_tag_cmd = {
-       "tag",
-       route_match_tag,
-       route_map_rule_tag_compile,
+       "tag", route_match_tag, route_map_rule_tag_compile,
        route_map_rule_tag_free,
 };
 
@@ -1169,10 +1167,7 @@ static void route_set_src_free(void *rule)
 
 /* Set src rule structure. */
 static struct route_map_rule_cmd route_set_src_cmd = {
-       "src",
-       route_set_src,
-       route_set_src_compile,
-       route_set_src_free,
+       "src", route_set_src, route_set_src_compile, route_set_src_free,
 };
 
 static int zebra_route_map_update_timer(struct thread *thread)
index 84b2c14dbe189e465c673c1fbd1bc8efc8b0c9a0..6cebae997c86f256d4dc59d7a5d83b685f289149 100644 (file)
@@ -81,6 +81,10 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p,
                        nh_p.u.prefix4 = si->addr.ipv4;
                        zebra_register_rnh_static_nh(si->vrf_id, &nh_p, rn);
                        break;
+               case STATIC_IPV4_GATEWAY_IFINDEX:
+                       nexthop = route_entry_nexthop_ipv4_ifindex_add(
+                               re, &si->addr.ipv4, NULL, si->ifindex);
+                       break;
                case STATIC_IFINDEX:
                        nexthop = route_entry_nexthop_ifindex_add(re,
                                                                  si->ifindex);
@@ -152,6 +156,10 @@ void static_install_route(afi_t afi, safi_t safi, struct prefix *p,
                        nh_p.u.prefix4 = si->addr.ipv4;
                        zebra_register_rnh_static_nh(si->vrf_id, &nh_p, rn);
                        break;
+               case STATIC_IPV4_GATEWAY_IFINDEX:
+                       nexthop = route_entry_nexthop_ipv4_ifindex_add(
+                               re, &si->addr.ipv4, NULL, si->ifindex);
+                       break;
                case STATIC_IFINDEX:
                        nexthop = route_entry_nexthop_ifindex_add(re,
                                                                  si->ifindex);
@@ -216,6 +224,11 @@ static int static_nexthop_same(struct nexthop *nexthop, struct static_route *si)
            && si->type == STATIC_IPV4_GATEWAY
            && IPV4_ADDR_SAME(&nexthop->gate.ipv4, &si->addr.ipv4))
                return 1;
+       else if (nexthop->type == NEXTHOP_TYPE_IPV4_IFINDEX
+                && si->type == STATIC_IPV4_GATEWAY_IFINDEX
+                && IPV4_ADDR_SAME(&nexthop->gate.ipv4, &si->addr.ipv4)
+                && nexthop->ifindex == si->ifindex)
+               return 1;
        else if (nexthop->type == NEXTHOP_TYPE_IFINDEX
                 && si->type == STATIC_IFINDEX
                 && nexthop->ifindex == si->ifindex)
@@ -362,12 +375,16 @@ int static_add_route(afi_t afi, safi_t safi, u_char type, struct prefix *p,
                return -1;
 
        if (!gate
-           && (type == STATIC_IPV4_GATEWAY || type == STATIC_IPV6_GATEWAY
+           && (type == STATIC_IPV4_GATEWAY
+               || type == STATIC_IPV4_GATEWAY_IFINDEX
+               || type == STATIC_IPV6_GATEWAY
                || type == STATIC_IPV6_GATEWAY_IFINDEX))
                return -1;
 
        if (!ifindex
-           && (type == STATIC_IFINDEX || type == STATIC_IPV6_GATEWAY_IFINDEX))
+           && (type == STATIC_IFINDEX
+               || type == STATIC_IPV4_GATEWAY_IFINDEX
+               || type == STATIC_IPV6_GATEWAY_IFINDEX))
                return -1;
 
        /* Lookup static route prefix. */
@@ -376,11 +393,10 @@ int static_add_route(afi_t afi, safi_t safi, u_char type, struct prefix *p,
        /* Do nothing if there is a same static route.  */
        for (si = rn->info; si; si = si->next) {
                if (type == si->type
-                   && (!gate
-                       || ((afi == AFI_IP
-                            && IPV4_ADDR_SAME(gate, &si->addr.ipv4))
-                           || (afi == AFI_IP6
-                               && IPV6_ADDR_SAME(gate, &si->addr.ipv6))))
+                   && (!gate || ((afi == AFI_IP
+                                  && IPV4_ADDR_SAME(gate, &si->addr.ipv4))
+                                 || (afi == AFI_IP6
+                                     && IPV6_ADDR_SAME(gate, &si->addr.ipv6))))
                    && (!ifindex || ifindex == si->ifindex)) {
                        if ((distance == si->distance) && (tag == si->tag)
                            && !memcmp(&si->snh_label, snh_label,
@@ -413,11 +429,10 @@ int static_add_route(afi_t afi, safi_t safi, u_char type, struct prefix *p,
 
        switch (type) {
        case STATIC_IPV4_GATEWAY:
+       case STATIC_IPV4_GATEWAY_IFINDEX:
                si->addr.ipv4 = gate->ipv4;
                break;
        case STATIC_IPV6_GATEWAY:
-               si->addr.ipv6 = gate->ipv6;
-               break;
        case STATIC_IPV6_GATEWAY_IFINDEX:
                si->addr.ipv6 = gate->ipv6;
                break;
@@ -485,11 +500,10 @@ int static_delete_route(afi_t afi, safi_t safi, u_char type, struct prefix *p,
        /* Find same static route is the tree */
        for (si = rn->info; si; si = si->next)
                if (type == si->type
-                   && (!gate
-                       || ((afi == AFI_IP
-                            && IPV4_ADDR_SAME(gate, &si->addr.ipv4))
-                           || (afi == AFI_IP6
-                               && IPV6_ADDR_SAME(gate, &si->addr.ipv6))))
+                   && (!gate || ((afi == AFI_IP
+                                  && IPV4_ADDR_SAME(gate, &si->addr.ipv4))
+                                 || (afi == AFI_IP6
+                                     && IPV6_ADDR_SAME(gate, &si->addr.ipv6))))
                    && (!ifindex || ifindex == si->ifindex)
                    && (!tag || (tag == si->tag))
                    && (!snh_label->num_labels
index 91ac0a33c2d58005192d71ea9bcbe82b3893f482..885774895fe9a4a70fcf3182ee2384a9f4b40ab2 100644 (file)
@@ -32,6 +32,7 @@ struct static_nh_label {
 typedef enum {
        STATIC_IFINDEX,
        STATIC_IPV4_GATEWAY,
+       STATIC_IPV4_GATEWAY_IFINDEX,
        STATIC_BLACKHOLE,
        STATIC_IPV6_GATEWAY,
        STATIC_IPV6_GATEWAY_IFINDEX,
@@ -57,11 +58,6 @@ struct static_route {
 
        /*
         * Nexthop value.
-        *
-        * Under IPv4 addr and ifindex are
-        * used independentyly.
-        * STATIC_IPV4_GATEWAY uses addr
-        * STATIC_IFINDEX uses ifindex
         */
        union g_addr addr;
        ifindex_t ifindex;
@@ -100,16 +96,4 @@ extern int static_delete_route(afi_t, safi_t safi, u_char type,
                               struct zebra_vrf *zvrf,
                               struct static_nh_label *snh_label);
 
-int zebra_static_ipv4(struct vty *vty, safi_t safi, int add_cmd,
-                     const char *dest_str, const char *mask_str,
-                     const char *gate_str, const char *flag_str,
-                     const char *tag_str, const char *distance_str,
-                     const char *vrf_id_str, const char *label_str);
-
-int static_ipv6_func(struct vty *vty, int add_cmd, const char *dest_str,
-                    const char *src_str, const char *gate_str,
-                    const char *ifname, const char *flag_str,
-                    const char *tag_str, const char *distance_str,
-                    const char *vrf_id_str, const char *label_str);
-
 #endif
index a97672599da531b7cb0f30a30bbde101bb902b90..e8b82ecf902735ac8b051a5622591979e1a3288c 100644 (file)
@@ -43,6 +43,7 @@
 #include "zebra/zebra_static.h"
 #include "lib/json.h"
 #include "zebra/zebra_vxlan.h"
+#include "zebra/zebra_vty_clippy.c"
 
 extern int allow_delete;
 
@@ -61,40 +62,59 @@ static void vty_show_ip_route_detail(struct vty *vty, struct route_node *rn,
 #define CMD_VNI_RANGE "(1-16777215)"
 
 /* General function for static route. */
-int zebra_static_ipv4(struct vty *vty, safi_t safi, int add_cmd,
-                     const char *dest_str, const char *mask_str,
-                     const char *gate_str, const char *flag_str,
-                     const char *tag_str, const char *distance_str,
-                     const char *vrf_id_str, const char *label_str)
+static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi,
+                             const char *negate, const char *dest_str,
+                             const char *mask_str, const char *src_str,
+                             const char *gate_str, const char *ifname,
+                             const char *flag_str, const char *tag_str,
+                             const char *distance_str, const char *vrf_id_str,
+                             const char *label_str)
 {
        int ret;
        u_char distance;
-       struct prefix p;
-       struct in_addr gate;
+       struct prefix p, src;
+       struct prefix_ipv6 *src_p = NULL;
+       union g_addr gate;
+       union g_addr *gatep = NULL;
        struct in_addr mask;
        u_char flag = 0;
        route_tag_t tag = 0;
-       struct zebra_vrf *zvrf = NULL;
+       struct zebra_vrf *zvrf;
        unsigned int ifindex = 0;
-       const char *ifname = NULL;
-       u_char type = STATIC_BLACKHOLE;
+       u_char type;
        struct static_nh_label snh_label;
 
-       memset(&snh_label, 0, sizeof(struct static_nh_label));
        ret = str2prefix(dest_str, &p);
        if (ret <= 0) {
                vty_out(vty, "%% Malformed address\n");
                return CMD_WARNING_CONFIG_FAILED;
        }
 
-       /* Cisco like mask notation. */
-       if (mask_str) {
-               ret = inet_aton(mask_str, &mask);
-               if (ret == 0) {
-                       vty_out(vty, "%% Malformed address\n");
-                       return CMD_WARNING_CONFIG_FAILED;
+       switch (afi) {
+       case AFI_IP:
+               /* Cisco like mask notation. */
+               if (mask_str) {
+                       ret = inet_aton(mask_str, &mask);
+                       if (ret == 0) {
+                               vty_out(vty, "%% Malformed address\n");
+                               return CMD_WARNING_CONFIG_FAILED;
+                       }
+                       p.prefixlen = ip_masklen(mask);
+               }
+               break;
+       case AFI_IP6:
+               /* srcdest routing */
+               if (src_str) {
+                       ret = str2prefix(src_str, &src);
+                       if (ret <= 0 || src.family != AF_INET6) {
+                               vty_out(vty, "%% Malformed source address\n");
+                               return CMD_WARNING_CONFIG_FAILED;
+                       }
+                       src_p = (struct prefix_ipv6 *)&src;
                }
-               p.prefixlen = ip_masklen(mask);
+               break;
+       default:
+               break;
        }
 
        /* Apply mask for given prefix. */
@@ -119,6 +139,7 @@ int zebra_static_ipv4(struct vty *vty, safi_t safi, int add_cmd,
        }
 
        /* Labels */
+       memset(&snh_label, 0, sizeof(struct static_nh_label));
        if (label_str) {
                if (!mpls_enabled) {
                        vty_out(vty,
@@ -149,22 +170,15 @@ int zebra_static_ipv4(struct vty *vty, safi_t safi, int add_cmd,
        }
 
        /* Null0 static route.  */
-       if ((gate_str != NULL)
-           && (strncasecmp(gate_str, "Null0", strlen(gate_str)) == 0)) {
+       if ((ifname != NULL)
+           && (strncasecmp(ifname, "Null0", strlen(ifname)) == 0)) {
                if (flag_str) {
                        vty_out(vty, "%% can not have flag %s with Null0\n",
                                flag_str);
                        return CMD_WARNING_CONFIG_FAILED;
                }
-               if (add_cmd)
-                       static_add_route(AFI_IP, safi, type, &p, NULL, NULL,
-                                        ifindex, ifname, ZEBRA_FLAG_BLACKHOLE,
-                                        tag, distance, zvrf, &snh_label);
-               else
-                       static_delete_route(AFI_IP, safi, type, &p, NULL, NULL,
-                                           ifindex, tag, distance, zvrf,
-                                           &snh_label);
-               return CMD_SUCCESS;
+               SET_FLAG(flag, ZEBRA_FLAG_BLACKHOLE);
+               ifname = NULL;
        }
 
        /* Route flags */
@@ -184,70 +198,56 @@ int zebra_static_ipv4(struct vty *vty, safi_t safi, int add_cmd,
                }
        }
 
-       if (gate_str == NULL) {
-               if (add_cmd)
-                       static_add_route(AFI_IP, safi, type, &p, NULL, NULL,
-                                        ifindex, ifname, flag, tag, distance,
-                                        zvrf, &snh_label);
-               else
-                       static_delete_route(AFI_IP, safi, type, &p, NULL, NULL,
-                                           ifindex, tag, distance, zvrf,
-                                           &snh_label);
-
-               return CMD_SUCCESS;
+       if (gate_str) {
+               if (inet_pton(afi2family(afi), gate_str, &gate) != 1) {
+                       vty_out(vty, "%% Malformed nexthop address %s\n",
+                               gate_str);
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
+               gatep = &gate;
        }
 
-       /* When gateway is A.B.C.D format, gate is treated as nexthop
-          address other case gate is treated as interface name. */
-       ret = inet_aton(gate_str, &gate);
-       if (!ret) {
-               struct interface *ifp =
-                       if_lookup_by_name(gate_str, zvrf_id(zvrf));
+       if (ifname) {
+               struct interface *ifp;
+               ifp = if_lookup_by_name(ifname, zvrf_id(zvrf));
                if (!ifp) {
-                       vty_out(vty, "%% Unknown interface: %s\n", gate_str);
+                       vty_out(vty, "%% Malformed Interface name %s\n",
+                               ifname);
                        ifindex = IFINDEX_DELETED;
                } else
                        ifindex = ifp->ifindex;
-               ifname = gate_str;
+       }
+
+       if (gate_str == NULL && ifname == NULL)
+               type = STATIC_BLACKHOLE;
+       else if (gate_str && ifname) {
+               if (afi == AFI_IP)
+                       type = STATIC_IPV4_GATEWAY_IFINDEX;
+               else
+                       type = STATIC_IPV6_GATEWAY_IFINDEX;
+       } else if (ifname)
                type = STATIC_IFINDEX;
-       } else
-               type = STATIC_IPV4_GATEWAY;
+       else {
+               if (afi == AFI_IP)
+                       type = STATIC_IPV4_GATEWAY;
+               else
+                       type = STATIC_IPV6_GATEWAY;
+       }
 
-       if (add_cmd)
-               static_add_route(AFI_IP, safi, type, &p, NULL,
-                                ifindex ? NULL : (union g_addr *)&gate,
-                                ifindex, ifname, flag, tag, distance, zvrf,
-                                &snh_label);
+       if (!negate)
+               static_add_route(afi, safi, type, &p, src_p, gatep, ifindex,
+                                ifname, flag, tag, distance, zvrf, &snh_label);
        else
-               static_delete_route(AFI_IP, safi, type, &p, NULL,
-                                   ifindex ? NULL : (union g_addr *)&gate,
-                                   ifindex, tag, distance, zvrf, &snh_label);
+               static_delete_route(afi, safi, type, &p, src_p, gatep, ifindex,
+                                   tag, distance, zvrf, &snh_label);
 
        return CMD_SUCCESS;
 }
 
 /* Static unicast routes for multicast RPF lookup. */
-DEFUN (ip_mroute_dist,
+DEFPY (ip_mroute_dist,
        ip_mroute_dist_cmd,
-       "ip mroute A.B.C.D/M <A.B.C.D|INTERFACE> [(1-255)]",
-       IP_STR
-       "Configure static unicast route into MRIB for multicast RPF lookup\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "Nexthop address\n"
-       "Nexthop interface name\n"
-       "Distance\n")
-{
-       char *destprefix = argv[2]->arg;
-       char *nexthop = argv[3]->arg;
-       char *distance = (argc == 5) ? argv[4]->arg : NULL;
-
-       return zebra_static_ipv4(vty, SAFI_MULTICAST, 1, destprefix, NULL,
-                                nexthop, NULL, NULL, distance, NULL, NULL);
-}
-
-DEFUN (no_ip_mroute_dist,
-       no_ip_mroute_dist_cmd,
-       "no ip mroute A.B.C.D/M <A.B.C.D|INTERFACE> [(1-255)]",
+       "[no] ip mroute A.B.C.D/M$prefix <A.B.C.D$gate|INTERFACE$ifname> [(1-255)$distance]",
        NO_STR
        IP_STR
        "Configure static unicast route into MRIB for multicast RPF lookup\n"
@@ -256,12 +256,9 @@ DEFUN (no_ip_mroute_dist,
        "Nexthop interface name\n"
        "Distance\n")
 {
-       char *destprefix = argv[3]->arg;
-       char *nexthop = argv[4]->arg;
-       char *distance = (argc == 6) ? argv[5]->arg : NULL;
-
-       return zebra_static_ipv4(vty, SAFI_MULTICAST, 0, destprefix, NULL,
-                                nexthop, NULL, NULL, distance, NULL, NULL);
+       return zebra_static_route(vty, AFI_IP, SAFI_MULTICAST, no, prefix_str,
+                                 NULL, NULL, gate_str, ifname, NULL, NULL,
+                                 distance_str, NULL, NULL);
 }
 
 DEFUN (ip_multicast_mode,
@@ -357,270 +354,43 @@ DEFUN (show_ip_rpf_addr,
        return CMD_SUCCESS;
 }
 
-static void zebra_vty_ip_route_tdv_helper(int argc, struct cmd_token *argv[],
-                                         int idx_curr, char **tag,
-                                         char **distance, char **vrf,
-                                         char **labels)
-{
-       *distance = NULL;
-       while (idx_curr < argc) {
-               if (strmatch(argv[idx_curr]->text, "tag")) {
-                       if (tag)
-                               *tag = argv[idx_curr + 1]->arg;
-                       idx_curr += 2;
-               } else if (strmatch(argv[idx_curr]->text, "vrf")) {
-                       if (vrf)
-                               *vrf = argv[idx_curr + 1]->arg;
-                       idx_curr += 2;
-               } else if (strmatch(argv[idx_curr]->text, "label")) {
-                       if (labels)
-                               *labels = argv[idx_curr + 1]->arg;
-                       idx_curr += 2;
-               } else {
-                       if (distance)
-                               *distance = argv[idx_curr]->arg;
-                       idx_curr++;
-               }
-       }
-
-       return;
-}
-
 /* Static route configuration.  */
-DEFUN (ip_route,
+DEFPY (ip_route,
        ip_route_cmd,
-       "ip route A.B.C.D/M <A.B.C.D|INTERFACE|null0> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this route\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv4_prefixlen = 2;
-       int idx_ipv4_ifname_null = 3;
-       int idx_curr = 4;
-       char *tag, *distance, *vrf;
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 1,
-                                argv[idx_ipv4_prefixlen]->arg, NULL,
-                                argv[idx_ipv4_ifname_null]->arg, NULL, tag,
-                                distance, vrf, NULL);
-}
-
-DEFUN (ip_route_flags,
-       ip_route_flags_cmd,
-       "ip route A.B.C.D/M <reject|blackhole> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this route\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv4_prefixlen = 2;
-       int idx_reject_blackhole = 3;
-       int idx_curr = 4;
-       char *tag, *distance, *vrf;
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return zebra_static_ipv4(
-               vty, SAFI_UNICAST, 1, argv[idx_ipv4_prefixlen]->arg, NULL, NULL,
-               argv[idx_reject_blackhole]->arg, tag, distance, vrf, NULL);
-}
-
-/* Mask as A.B.C.D format.  */
-DEFUN (ip_route_mask,
-       ip_route_mask_cmd,
-       "ip route A.B.C.D A.B.C.D <A.B.C.D|INTERFACE|null0> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix\n"
-       "IP destination prefix mask\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this route\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv4 = 2;
-       int idx_ipv4_2 = 3;
-       int idx_ipv4_ifname_null = 4;
-       int idx_curr = 5;
-       char *tag, *distance, *vrf;
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[idx_ipv4]->arg,
-                                argv[idx_ipv4_2]->arg,
-                                argv[idx_ipv4_ifname_null]->arg, NULL, tag,
-                                distance, vrf, NULL);
-}
-
-DEFUN (ip_route_mask_flags,
-       ip_route_mask_flags_cmd,
-       "ip route A.B.C.D A.B.C.D <reject|blackhole> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix\n"
-       "IP destination prefix mask\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this route\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv4 = 2;
-       int idx_ipv4_2 = 3;
-       int idx_reject_blackhole = 4;
-       int idx_curr = 5;
-       char *tag, *distance, *vrf;
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 1, argv[idx_ipv4]->arg,
-                                argv[idx_ipv4_2]->arg, NULL,
-                                argv[idx_reject_blackhole]->arg, tag, distance,
-                                vrf, NULL);
-}
-
-DEFUN (no_ip_route,
-       no_ip_route_cmd,
-       "no ip route A.B.C.D/M <A.B.C.D|INTERFACE|null0> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
+       "[no] ip route\
+          <A.B.C.D/M$prefix|A.B.C.D$prefix A.B.C.D$mask>\
+          <\
+            {A.B.C.D$gate|INTERFACE$ifname}\
+            |null0$ifname\
+            |<reject|blackhole>$flag\
+          >\
+          [{\
+            tag (1-4294967295)\
+            |(1-255)$distance\
+            |vrf NAME\
+            |label WORD\
+          }]",
        NO_STR
        IP_STR
        "Establish static routes\n"
        "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "IP gateway address\n"
-       "IP gateway interface name\n"
-       "Null interface\n"
-       "Tag of this route\n"
-       "Tag value\n"
-       "Distance value for this route\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv4_prefixlen = 3;
-       int idx_ipv4_ifname_null = 4;
-       int idx_curr = 5;
-       char *tag, *distance, *vrf;
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0,
-                                argv[idx_ipv4_prefixlen]->arg, NULL,
-                                argv[idx_ipv4_ifname_null]->arg, NULL, tag,
-                                distance, vrf, NULL);
-}
-
-DEFUN (no_ip_route_flags,
-       no_ip_route_flags_cmd,
-       "no ip route A.B.C.D/M <reject|blackhole> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix (e.g. 10.0.0.0/8)\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Tag of this route\n"
-       "Tag value\n"
-       "Distance value for this route\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv4_prefixlen = 3;
-       int idx_curr = 5;
-       char *tag, *distance, *vrf;
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0,
-                                argv[idx_ipv4_prefixlen]->arg, NULL, NULL,
-                                NULL, tag, distance, vrf, NULL);
-}
-
-DEFUN (no_ip_route_mask,
-       no_ip_route_mask_cmd,
-       "no ip route A.B.C.D A.B.C.D <A.B.C.D|INTERFACE|null0> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
        "IP destination prefix\n"
        "IP destination prefix mask\n"
        "IP gateway address\n"
        "IP gateway interface name\n"
        "Null interface\n"
-       "Tag of this route\n"
-       "Tag value\n"
-       "Distance value for this route\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv4 = 3;
-       int idx_ipv4_2 = 4;
-       int idx_ipv4_ifname_null = 5;
-       int idx_curr = 6;
-       char *tag, *distance, *vrf;
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[idx_ipv4]->arg,
-                                argv[idx_ipv4_2]->arg,
-                                argv[idx_ipv4_ifname_null]->arg, NULL, tag,
-                                distance, vrf, NULL);
-}
-
-DEFUN (no_ip_route_mask_flags,
-       no_ip_route_mask_flags_cmd,
-       "no ip route A.B.C.D A.B.C.D <reject|blackhole> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IP destination prefix\n"
-       "IP destination prefix mask\n"
        "Emit an ICMP unreachable when matched\n"
        "Silently discard pkts when matched\n"
-       "Tag of this route\n"
+       "Set tag for this route\n"
        "Tag value\n"
        "Distance value for this route\n"
-       VRF_CMD_HELP_STR)
+       VRF_CMD_HELP_STR
+       MPLS_LABEL_HELPSTR)
 {
-       int idx_ipv4 = 3;
-       int idx_ipv4_2 = 4;
-       int idx_curr = 6;
-       char *tag, *distance, *vrf;
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return zebra_static_ipv4(vty, SAFI_UNICAST, 0, argv[idx_ipv4]->arg,
-                                argv[idx_ipv4_2]->arg, NULL, NULL, tag,
-                                distance, vrf, NULL);
+       return zebra_static_route(vty, AFI_IP, SAFI_UNICAST, no, prefix,
+                                 mask_str, NULL, gate_str, ifname, flag,
+                                 tag_str, distance_str, vrf, label);
+       return 0;
 }
 
 /* New RIB.  Detailed information for IPv4 route. */
@@ -1231,9 +1001,8 @@ static int do_show_ip_route(struct vty *vty, const char *vrf_name, afi_t afi,
        }
 
        if (use_json) {
-               vty_out(vty, "%s\n",
-                       json_object_to_json_string_ext(
-                               json, JSON_C_TO_STRING_PRETTY));
+               vty_out(vty, "%s\n", json_object_to_json_string_ext(
+                                            json, JSON_C_TO_STRING_PRETTY));
                json_object_free(json);
        }
 
@@ -1621,9 +1390,8 @@ static void vty_show_ip_route_summary(struct vty *vty,
                "FIB", zvrf_name(((rib_table_info_t *)table->info)->zvrf));
 
        for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
-               if ((rib_cnt[i] > 0)
-                   || (i == ZEBRA_ROUTE_BGP
-                       && rib_cnt[ZEBRA_ROUTE_IBGP] > 0)) {
+               if ((rib_cnt[i] > 0) || (i == ZEBRA_ROUTE_BGP
+                                        && rib_cnt[ZEBRA_ROUTE_IBGP] > 0)) {
                        if (i == ZEBRA_ROUTE_BGP) {
                                vty_out(vty, "%-20s %-20d %-20d \n", "ebgp",
                                        rib_cnt[ZEBRA_ROUTE_BGP],
@@ -1939,8 +1707,20 @@ static int static_config(struct vty *vty, afi_t afi, safi_t safi,
                                case STATIC_IFINDEX:
                                        vty_out(vty, " %s", si->ifname);
                                        break;
+                               /* blackhole and Null0 mean the same thing */
                                case STATIC_BLACKHOLE:
-                                       vty_out(vty, " Null0");
+                                       if (CHECK_FLAG(si->flags, ZEBRA_FLAG_REJECT))
+                                               vty_out(vty, " reject");
+                                       else
+                                               vty_out(vty, " Null0");
+                                       break;
+                               case STATIC_IPV4_GATEWAY_IFINDEX:
+                                       vty_out(vty, " %s %s",
+                                               inet_ntop(AF_INET,
+                                                         &si->addr.ipv4, buf,
+                                                         sizeof buf),
+                                               ifindex2ifname(si->ifindex,
+                                                              si->vrf_id));
                                        break;
                                case STATIC_IPV6_GATEWAY_IFINDEX:
                                        vty_out(vty, " %s %s",
@@ -1994,360 +1774,22 @@ static int static_config(struct vty *vty, afi_t afi, safi_t safi,
        return write;
 }
 
-/* General fucntion for IPv6 static route. */
-int static_ipv6_func(struct vty *vty, int add_cmd, const char *dest_str,
-                    const char *src_str, const char *gate_str,
-                    const char *ifname, const char *flag_str,
-                    const char *tag_str, const char *distance_str,
-                    const char *vrf_id_str, const char *label_str)
-{
-       int ret;
-       u_char distance;
-       struct prefix p, src;
-       struct prefix_ipv6 *src_p = NULL;
-       struct in6_addr *gate = NULL;
-       struct in6_addr gate_addr;
-       u_char type = STATIC_BLACKHOLE;
-       u_char flag = 0;
-       route_tag_t tag = 0;
-       unsigned int ifindex = 0;
-       struct interface *ifp = NULL;
-       struct zebra_vrf *zvrf;
-       struct static_nh_label snh_label;
-
-       ret = str2prefix(dest_str, &p);
-       if (ret <= 0) {
-               vty_out(vty, "%% Malformed address\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-
-       if (src_str) {
-               ret = str2prefix(src_str, &src);
-               if (ret <= 0 || src.family != AF_INET6) {
-                       vty_out(vty, "%% Malformed source address\n");
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-               src_p = (struct prefix_ipv6 *)&src;
-       }
-
-       /* Apply mask for given prefix. */
-       apply_mask(&p);
-
-       /* Administrative distance. */
-       if (distance_str)
-               distance = atoi(distance_str);
-       else
-               distance = ZEBRA_STATIC_DISTANCE_DEFAULT;
-
-       /* tag */
-       if (tag_str)
-               tag = strtoul(tag_str, NULL, 10);
-
-       /* When gateway is valid IPv6 addrees, then gate is treated as
-          nexthop address other case gate is treated as interface name. */
-       ret = inet_pton(AF_INET6, gate_str, &gate_addr);
-
-       /* VRF id */
-       zvrf = zebra_vrf_lookup_by_name(vrf_id_str);
-
-       if (!zvrf) {
-               vty_out(vty, "%% vrf %s is not defined\n", vrf_id_str);
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-
-       /* Labels */
-       memset(&snh_label, 0, sizeof(struct static_nh_label));
-       if (label_str) {
-               if (!mpls_enabled) {
-                       vty_out(vty,
-                               "%% MPLS not turned on in kernel, ignoring command\n");
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-               int rc = mpls_str2label(label_str, &snh_label.num_labels,
-                                       snh_label.label);
-               if (rc < 0) {
-                       switch (rc) {
-                       case -1:
-                               vty_out(vty, "%% Malformed label(s)\n");
-                               break;
-                       case -2:
-                               vty_out(vty,
-                                       "%% Cannot use reserved label(s) (%d-%d)\n",
-                                       MPLS_MIN_RESERVED_LABEL,
-                                       MPLS_MAX_RESERVED_LABEL);
-                               break;
-                       case -3:
-                               vty_out(vty,
-                                       "%% Too many labels. Enter %d or fewer\n",
-                                       MPLS_MAX_LABELS);
-                               break;
-                       }
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-       }
-
-       /* Null0 static route.  */
-       if ((gate_str != NULL)
-           && (strncasecmp(gate_str, "Null0", strlen(gate_str)) == 0)) {
-               if (flag_str) {
-                       vty_out(vty, "%% can not have flag %s with Null0\n",
-                               flag_str);
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-               if (add_cmd)
-                       static_add_route(AFI_IP6, SAFI_UNICAST, type, &p, src_p,
-                                        NULL, ifindex, ifname,
-                                        ZEBRA_FLAG_BLACKHOLE, tag, distance,
-                                        zvrf, &snh_label);
-               else
-                       static_delete_route(AFI_IP6, SAFI_UNICAST, type, &p,
-                                           src_p, NULL, ifindex, tag, distance,
-                                           zvrf, &snh_label);
-               return CMD_SUCCESS;
-       }
-
-       /* Route flags */
-       if (flag_str) {
-               switch (flag_str[0]) {
-               case 'r':
-               case 'R': /* XXX */
-                       SET_FLAG(flag, ZEBRA_FLAG_REJECT);
-                       break;
-               case 'b':
-               case 'B': /* XXX */
-                       SET_FLAG(flag, ZEBRA_FLAG_BLACKHOLE);
-                       break;
-               default:
-                       vty_out(vty, "%% Malformed flag %s \n", flag_str);
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-       }
-
-       if (ifname) {
-               /* When ifname is specified.  It must be come with gateway
-                  address. */
-               if (ret != 1) {
-                       vty_out(vty, "%% Malformed address\n");
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-               type = STATIC_IPV6_GATEWAY_IFINDEX;
-               gate = &gate_addr;
-               ifp = if_lookup_by_name(ifname, zvrf_id(zvrf));
-               if (!ifp) {
-                       vty_out(vty, "%% Malformed Interface name %s\n",
-                               ifname);
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-               ifindex = ifp->ifindex;
-       } else {
-               if (ret == 1) {
-                       type = STATIC_IPV6_GATEWAY;
-                       gate = &gate_addr;
-               } else {
-                       type = STATIC_IFINDEX;
-                       ifp = if_lookup_by_name(gate_str, zvrf_id(zvrf));
-                       if (!ifp) {
-                               vty_out(vty, "%% Malformed Interface name %s\n",
-                                       gate_str);
-                               ifindex = IFINDEX_DELETED;
-                       } else
-                               ifindex = ifp->ifindex;
-                       ifname = gate_str;
-               }
-       }
-
-       if (add_cmd)
-               static_add_route(AFI_IP6, SAFI_UNICAST, type, &p, src_p,
-                                (union g_addr *)gate, ifindex, ifname, flag,
-                                tag, distance, zvrf, &snh_label);
-       else
-               static_delete_route(AFI_IP6, SAFI_UNICAST, type, &p, src_p,
-                                   (union g_addr *)gate, ifindex, tag,
-                                   distance, zvrf, &snh_label);
-
-       return CMD_SUCCESS;
-}
-
-DEFUN (ipv6_route,
+DEFPY (ipv6_route,
        ipv6_route_cmd,
-       "ipv6 route X:X::X:X/M [from X:X::X:X/M] <X:X::X:X|INTERFACE|null0> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 source-dest route\n"
-       "IPv6 source prefix\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Null interface\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv6_prefixlen = 2;
-       int idx_ipv6_ifname;
-       int idx_curr;
-       char *src, *tag, *distance, *vrf;
-
-       if (strmatch(argv[3]->text, "from")) {
-               src = argv[4]->arg;
-               idx_ipv6_ifname = 5;
-               idx_curr = 6;
-       } else {
-               src = NULL;
-               idx_ipv6_ifname = 3;
-               idx_curr = 4;
-       }
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return static_ipv6_func(vty, 1, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6_ifname]->arg, NULL, NULL, tag,
-                               distance, vrf, NULL);
-}
-
-DEFUN (ipv6_route_flags,
-       ipv6_route_flags_cmd,
-       "ipv6 route X:X::X:X/M [from X:X::X:X/M] <X:X::X:X|INTERFACE> <reject|blackhole> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 source-dest route\n"
-       "IPv6 source prefix\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv6_prefixlen = 2;
-       int idx_ipv6_ifname;
-       int idx_reject_blackhole;
-       int idx_curr;
-       char *src, *tag, *distance, *vrf;
-
-       if (strmatch(argv[3]->text, "from")) {
-               src = argv[4]->arg;
-               idx_ipv6_ifname = 5;
-               idx_reject_blackhole = 6;
-               idx_curr = 7;
-       } else {
-               src = NULL;
-               idx_ipv6_ifname = 3;
-               idx_reject_blackhole = 4;
-               idx_curr = 5;
-       }
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return static_ipv6_func(vty, 1, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6_ifname]->arg, NULL,
-                               argv[idx_reject_blackhole]->arg, tag, distance,
-                               vrf, NULL);
-}
-
-DEFUN (ipv6_route_ifname,
-       ipv6_route_ifname_cmd,
-       "ipv6 route X:X::X:X/M [from X:X::X:X/M] X:X::X:X INTERFACE [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 source-dest route\n"
-       "IPv6 source prefix\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv6_prefixlen = 2;
-       int idx_ipv6 = 3;
-       int idx_interface = 4;
-       int idx_curr = 5;
-       char *src, *tag, *distance, *vrf;
-
-       if (strmatch(argv[3]->text, "from")) {
-               src = argv[4]->arg;
-               idx_ipv6 = 5;
-               idx_interface = 6;
-               idx_curr = 7;
-       } else {
-               src = NULL;
-               idx_ipv6 = 3;
-               idx_interface = 4;
-               idx_curr = 5;
-       }
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return static_ipv6_func(vty, 1, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6]->arg, argv[idx_interface]->arg,
-                               NULL, tag, distance, vrf, NULL);
-}
-
-DEFUN (ipv6_route_ifname_flags,
-       ipv6_route_ifname_flags_cmd,
-       "ipv6 route X:X::X:X/M [from X:X::X:X/M] X:X::X:X INTERFACE <reject|blackhole> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 source-dest route\n"
-       "IPv6 source prefix\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv6_prefixlen = 2;
-       int idx_ipv6;
-       int idx_interface;
-       int idx_reject_blackhole;
-       int idx_curr;
-       char *src, *tag, *distance, *vrf;
-
-       if (strmatch(argv[3]->text, "from")) {
-               src = argv[4]->arg;
-               idx_ipv6 = 5;
-               idx_interface = 6;
-               idx_reject_blackhole = 7;
-               idx_curr = 8;
-       } else {
-               src = NULL;
-               idx_ipv6 = 3;
-               idx_interface = 4;
-               idx_reject_blackhole = 5;
-               idx_curr = 6;
-       }
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return static_ipv6_func(vty, 1, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6]->arg, argv[idx_interface]->arg,
-                               argv[idx_reject_blackhole]->arg, tag, distance,
-                               vrf, NULL);
-}
-
-DEFUN (no_ipv6_route,
-       no_ipv6_route_cmd,
-       "no ipv6 route X:X::X:X/M [from X:X::X:X/M] <X:X::X:X|INTERFACE|null0> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
+       "[no] ipv6 route X:X::X:X/M$prefix [from X:X::X:X/M]\
+          <\
+            {X:X::X:X$gate|INTERFACE$ifname}\
+            |null0$ifname\
+            |<reject|blackhole>$flag\
+          >\
+          [{\
+            tag (1-4294967295)\
+            |(1-255)$distance\
+            |vrf NAME\
+            |label WORD\
+          }]",
        NO_STR
-       IP_STR
+       IPV6_STR
        "Establish static routes\n"
        "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
        "IPv6 source-dest route\n"
@@ -2355,171 +1797,17 @@ DEFUN (no_ipv6_route,
        "IPv6 gateway address\n"
        "IPv6 gateway interface name\n"
        "Null interface\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv6_prefixlen = 3;
-       int idx_ipv6_ifname;
-       int idx_curr;
-       char *src, *tag, *distance, *vrf;
-
-       if (strmatch(argv[4]->text, "from")) {
-               src = argv[5]->arg;
-               idx_ipv6_ifname = 6;
-               idx_curr = 7;
-       } else {
-               src = NULL;
-               idx_ipv6_ifname = 4;
-               idx_curr = 5;
-       }
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return static_ipv6_func(vty, 0, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6_ifname]->arg, NULL, NULL, tag,
-                               distance, vrf, NULL);
-}
-
-DEFUN (no_ipv6_route_flags,
-       no_ipv6_route_flags_cmd,
-       "no ipv6 route X:X::X:X/M [from X:X::X:X/M] <X:X::X:X|INTERFACE> <reject|blackhole> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 source-dest route\n"
-       "IPv6 source prefix\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv6_prefixlen = 3;
-       int idx_ipv6_ifname;
-       int idx_reject_blackhole;
-       int idx_curr;
-       char *src, *tag, *distance, *vrf;
-
-       if (strmatch(argv[4]->text, "from")) {
-               src = argv[5]->arg;
-               idx_ipv6_ifname = 6;
-               idx_reject_blackhole = 7;
-               idx_curr = 8;
-       } else {
-               src = NULL;
-               idx_ipv6_ifname = 4;
-               idx_reject_blackhole = 5;
-               idx_curr = 6;
-       }
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return static_ipv6_func(vty, 0, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6_ifname]->arg, NULL,
-                               argv[idx_reject_blackhole]->arg, tag, distance,
-                               vrf, NULL);
-}
-
-DEFUN (no_ipv6_route_ifname,
-       no_ipv6_route_ifname_cmd,
-       "no ipv6 route X:X::X:X/M [from X:X::X:X/M] X:X::X:X INTERFACE [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 source-dest route\n"
-       "IPv6 source prefix\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv6_prefixlen = 3;
-       int idx_ipv6;
-       int idx_interface;
-       int idx_curr;
-       char *src, *tag, *distance, *vrf;
-
-       if (strmatch(argv[4]->text, "from")) {
-               src = argv[5]->arg;
-               idx_ipv6 = 6;
-               idx_interface = 7;
-               idx_curr = 8;
-       } else {
-               src = NULL;
-               idx_ipv6 = 4;
-               idx_interface = 5;
-               idx_curr = 6;
-       }
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return static_ipv6_func(vty, 0, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6]->arg, argv[idx_interface]->arg,
-                               NULL, tag, distance, vrf, NULL);
-}
-
-DEFUN (no_ipv6_route_ifname_flags,
-       no_ipv6_route_ifname_flags_cmd,
-       "no ipv6 route X:X::X:X/M [from X:X::X:X/M] X:X::X:X INTERFACE <reject|blackhole> [tag (1-4294967295)] [(1-255)] [vrf NAME]",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 source-dest route\n"
-       "IPv6 source prefix\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
        "Emit an ICMP unreachable when matched\n"
        "Silently discard pkts when matched\n"
        "Set tag for this route\n"
        "Tag value\n"
        "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
+       VRF_CMD_HELP_STR
+       MPLS_LABEL_HELPSTR)
 {
-       int idx_ipv6_prefixlen = 3;
-       int idx_ipv6;
-       int idx_interface;
-       int idx_reject_blackhole;
-       int idx_curr;
-       char *src, *tag, *distance, *vrf;
-
-       if (strmatch(argv[4]->text, "from")) {
-               src = argv[5]->arg;
-               idx_ipv6 = 6;
-               idx_interface = 7;
-               idx_reject_blackhole = 8;
-               idx_curr = 9;
-       } else {
-               src = NULL;
-               idx_ipv6 = 4;
-               idx_interface = 5;
-               idx_reject_blackhole = 6;
-               idx_curr = 7;
-       }
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return static_ipv6_func(vty, 0, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6]->arg, argv[idx_interface]->arg,
-                               argv[idx_reject_blackhole]->arg, tag, distance,
-                               vrf, NULL);
+       return zebra_static_route(vty, AFI_IP6, SAFI_UNICAST, no, prefix_str,
+                                 NULL, from_str, gate_str, ifname, flag,
+                                 tag_str, distance_str, vrf, label);
 }
 
 DEFUN (show_ipv6_route,
@@ -3372,15 +2660,9 @@ void zebra_vty_init(void)
        install_element(CONFIG_NODE, &allow_external_route_update_cmd);
        install_element(CONFIG_NODE, &no_allow_external_route_update_cmd);
        install_element(CONFIG_NODE, &ip_mroute_dist_cmd);
-       install_element(CONFIG_NODE, &no_ip_mroute_dist_cmd);
        install_element(CONFIG_NODE, &ip_multicast_mode_cmd);
        install_element(CONFIG_NODE, &no_ip_multicast_mode_cmd);
        install_element(CONFIG_NODE, &ip_route_cmd);
-       install_element(CONFIG_NODE, &ip_route_flags_cmd);
-       install_element(CONFIG_NODE, &ip_route_mask_cmd);
-       install_element(CONFIG_NODE, &ip_route_mask_flags_cmd);
-       install_element(CONFIG_NODE, &no_ip_route_cmd);
-       install_element(CONFIG_NODE, &no_ip_route_mask_cmd);
        install_element(CONFIG_NODE, &ip_zebra_import_table_distance_cmd);
        install_element(CONFIG_NODE, &no_ip_zebra_import_table_cmd);
 
@@ -3398,24 +2680,12 @@ void zebra_vty_init(void)
        install_element(VIEW_NODE, &show_ip_rpf_cmd);
        install_element(VIEW_NODE, &show_ip_rpf_addr_cmd);
 
-       /* Commands for VRF */
-
-       install_element(CONFIG_NODE, &no_ip_route_flags_cmd);
-       install_element(CONFIG_NODE, &no_ip_route_mask_flags_cmd);
-
        install_element(VIEW_NODE, &show_ip_route_vrf_all_addr_cmd);
        install_element(VIEW_NODE, &show_ip_route_vrf_all_prefix_cmd);
        install_element(VIEW_NODE, &show_ip_route_vrf_all_summary_cmd);
        install_element(VIEW_NODE, &show_ip_route_vrf_all_summary_prefix_cmd);
 
        install_element(CONFIG_NODE, &ipv6_route_cmd);
-       install_element(CONFIG_NODE, &ipv6_route_flags_cmd);
-       install_element(CONFIG_NODE, &ipv6_route_ifname_cmd);
-       install_element(CONFIG_NODE, &ipv6_route_ifname_flags_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_flags_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_ifname_cmd);
-       install_element(CONFIG_NODE, &no_ipv6_route_ifname_flags_cmd);
        install_element(CONFIG_NODE, &ip_nht_default_route_cmd);
        install_element(CONFIG_NODE, &no_ip_nht_default_route_cmd);
        install_element(CONFIG_NODE, &ipv6_nht_default_route_cmd);
index d03caabfa696591ae2a570d9ea45beebe3410220..c96f073064d80d1d347049e4e5345e9543990dc0 100644 (file)
@@ -903,10 +903,9 @@ static void zvni_mac_del_from_vtep(zebra_vni_t *zvni, int uninstall,
        wctx.flags = DEL_REMOTE_MAC_FROM_VTEP;
        wctx.r_vtep_ip = *r_vtep_ip;
 
-       hash_iterate(
-               zvni->mac_table,
-               (void (*)(struct hash_backet *, void *))zvni_mac_del_hash_entry,
-               &wctx);
+       hash_iterate(zvni->mac_table, (void (*)(struct hash_backet *,
+                                               void *))zvni_mac_del_hash_entry,
+                    &wctx);
 }
 
 /*
@@ -927,10 +926,9 @@ static void zvni_mac_del_all(struct zebra_vrf *zvrf, zebra_vni_t *zvni,
        wctx.upd_client = upd_client;
        wctx.flags = flags;
 
-       hash_iterate(
-               zvni->mac_table,
-               (void (*)(struct hash_backet *, void *))zvni_mac_del_hash_entry,
-               &wctx);
+       hash_iterate(zvni->mac_table, (void (*)(struct hash_backet *,
+                                               void *))zvni_mac_del_hash_entry,
+                    &wctx);
 }
 
 /*
@@ -1995,7 +1993,7 @@ int zebra_vxlan_local_neigh_add_update(struct interface *ifp,
                                send_del = 1;
                } else if (ext_learned)
                /* The neighbor is remote and that is the notification we got.
-                */
+                  */
                {
                        /* TODO: Evaluate if we need to do anything here. */
                        return 0;
index fb1ff74c28881483b07410ddcb3aa207ba906092..3bc5f83f6451d68fea444fea5165d275d75f86e9 100644 (file)
@@ -854,9 +854,8 @@ static int zserv_rnh_register(struct zserv *client, int sock, u_short length,
                        if (flags
                            && !CHECK_FLAG(rnh->flags, ZEBRA_NHT_EXACT_MATCH))
                                SET_FLAG(rnh->flags, ZEBRA_NHT_EXACT_MATCH);
-                       else if (!flags
-                                && CHECK_FLAG(rnh->flags,
-                                              ZEBRA_NHT_EXACT_MATCH))
+                       else if (!flags && CHECK_FLAG(rnh->flags,
+                                                     ZEBRA_NHT_EXACT_MATCH))
                                UNSET_FLAG(rnh->flags, ZEBRA_NHT_EXACT_MATCH);
                }
 
@@ -2820,9 +2819,8 @@ DEFUN (show_zebra,
        RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
        {
                struct zebra_vrf *zvrf = vrf->info;
-               vty_out(vty,
-                       "%-25s %10" PRIu64 " %10" PRIu64 " %10" PRIu64
-                       " %10" PRIu64 " %10" PRIu64 "\n",
+               vty_out(vty, "%-25s %10" PRIu64 " %10" PRIu64 " %10" PRIu64
+                            " %10" PRIu64 " %10" PRIu64 "\n",
                        vrf->name, zvrf->installs, zvrf->removals,
                        zvrf->neigh_updates, zvrf->lsp_installs,
                        zvrf->lsp_removals);