Dear Quagga Team
I am sending you my work of BGP Best External feature in below attached
patch. Please be informed that I am more networking guy than programmer :-)
and this was my first 'big' attempt to make something like that. I was
testing this with feature in Lab with Cisco devices. Feel free to edit, I
hope that it will be at least a little usefull, and also hope that patch is
OK. If more files are required or the format of the patch is not OK, just
ping me, I will try to correct.
Best.... Patrik
2015-05-01 21:06 GMT+02:00 Patrik Brigant <[email protected]>:
> Dear Quagga Team
>
> My name is Patrik Brigant and I am student of University of Zilina. As I
> am finishing my Engineer studies, my master thesis was about Current trends
> of BGP Routing Protocol. One of many parts was also implementation of BGP
> Best External feature to Quagga routing software.
>
> I want to provide you this feature, if you have interest. Is in your team
> someone who is responsible or familiar with bgpd deamon, and will be able
> to check my work. What additional steps i need to take, and in which format
> I need to give you my work. I heard about some patch. But currently I do
> not have any additional informations.
>
> thanks for now, and waiting to your reply.
> Patrik Brigant
>
> --
> Bc. Patrik Brigant
> Hviezdoslavova 43/33
> 965 01 Žiar nad Hronom
> Mobil : +421 915 808 794
> e-mail : [email protected]
>
>
--
Ing. Patrik Brigant
Mobil : +421 915 808 794
e-mail : [email protected]
diff --git a/.cproject b/.cproject
new file mode 100644
index 0000000..12b38ca
--- /dev/null
+++ b/.cproject
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.1853883517">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.1853883517" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1853883517" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug">
+ <folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1853883517." name="/" resourcePath="">
+ <toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1015130537" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+ <targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.1290313684" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
+ <builder buildPath="${workspace_loc:/Quagga-dev/Debug}" id="cdt.managedbuild.target.gnu.builder.exe.debug.858290364" managedBuildOn="true" name="Gnu Make Builder.Debug" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
+ <tool id="cdt.managedbuild.tool.gnu.archiver.base.213685074" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.413747712" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+ <option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1875201924" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+ <option id="gnu.cpp.compiler.exe.debug.option.debugging.level.327942973" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1733823074" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
+ <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.1105164547" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/>
+ <option id="gnu.c.compiler.exe.debug.option.debugging.level.1005127762" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.2109712361" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.899003548" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug">
+ <inputType id="cdt.managedbuild.tool.gnu.c.linker.input.722160152" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.2124554246" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug"/>
+ <tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.1323257344" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.874663049" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ <cconfiguration id="cdt.managedbuild.config.gnu.exe.release.730399321">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.730399321" moduleId="org.eclipse.cdt.core.settings" name="Release">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.730399321" name="Release" parent="cdt.managedbuild.config.gnu.exe.release">
+ <folderInfo id="cdt.managedbuild.config.gnu.exe.release.730399321." name="/" resourcePath="">
+ <toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.726784169" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+ <targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.1947568706" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
+ <builder buildPath="${workspace_loc:/Quagga-dev/Release}" id="cdt.managedbuild.target.gnu.builder.exe.release.896417" managedBuildOn="true" name="Gnu Make Builder.Release" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
+ <tool id="cdt.managedbuild.tool.gnu.archiver.base.1851645451" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.2074328187" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+ <option id="gnu.cpp.compiler.exe.release.option.optimization.level.1833294645" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+ <option id="gnu.cpp.compiler.exe.release.option.debugging.level.1803160242" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1495696552" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
+ <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.1398568965" superClass="gnu.c.compiler.exe.release.option.optimization.level" valueType="enumerated"/>
+ <option id="gnu.c.compiler.exe.release.option.debugging.level.1444865632" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.558205433" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.1869516649" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release">
+ <inputType id="cdt.managedbuild.tool.gnu.c.linker.input.820176899" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.365468612" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release"/>
+ <tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.650526139" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1574782063" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="Quagga-dev.cdt.managedbuild.target.gnu.exe.206025430" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.730399321;cdt.managedbuild.config.gnu.exe.release.730399321.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1495696552;cdt.managedbuild.tool.gnu.c.compiler.input.558205433">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1853883517;cdt.managedbuild.config.gnu.exe.debug.1853883517.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1733823074;cdt.managedbuild.tool.gnu.c.compiler.input.2109712361">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.pathentry"/>
+</cproject>
diff --git a/.project b/.project
new file mode 100644
index 0000000..fa0991e
--- /dev/null
+++ b/.project
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>Quagga-dev</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <triggers>clean,full,incremental,</triggers>
+ <arguments>
+ <dictionary>
+ <key>?name?</key>
+ <value></value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.append_environment</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.autoBuildTarget</key>
+ <value>all</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.buildArguments</key>
+ <value></value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.buildCommand</key>
+ <value>make</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.buildLocation</key>
+ <value>${workspace_loc:/Quagga-dev/Debug}</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
+ <value>clean</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.contents</key>
+ <value>org.eclipse.cdt.make.core.activeConfigSettings</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+ <value>false</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.enableFullBuild</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.fullBuildTarget</key>
+ <value>all</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.stopOnError</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+ <value>true</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Debug/babeld/subdir.mk b/Debug/babeld/subdir.mk
new file mode 100644
index 0000000..07ff2bf
--- /dev/null
+++ b/Debug/babeld/subdir.mk
@@ -0,0 +1,63 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../babeld/babel_filter.c \
+../babeld/babel_interface.c \
+../babeld/babel_main.c \
+../babeld/babel_zebra.c \
+../babeld/babeld.c \
+../babeld/kernel.c \
+../babeld/message.c \
+../babeld/neighbour.c \
+../babeld/net.c \
+../babeld/resend.c \
+../babeld/route.c \
+../babeld/source.c \
+../babeld/util.c \
+../babeld/xroute.c
+
+OBJS += \
+./babeld/babel_filter.o \
+./babeld/babel_interface.o \
+./babeld/babel_main.o \
+./babeld/babel_zebra.o \
+./babeld/babeld.o \
+./babeld/kernel.o \
+./babeld/message.o \
+./babeld/neighbour.o \
+./babeld/net.o \
+./babeld/resend.o \
+./babeld/route.o \
+./babeld/source.o \
+./babeld/util.o \
+./babeld/xroute.o
+
+C_DEPS += \
+./babeld/babel_filter.d \
+./babeld/babel_interface.d \
+./babeld/babel_main.d \
+./babeld/babel_zebra.d \
+./babeld/babeld.d \
+./babeld/kernel.d \
+./babeld/message.d \
+./babeld/neighbour.d \
+./babeld/net.d \
+./babeld/resend.d \
+./babeld/route.d \
+./babeld/source.d \
+./babeld/util.d \
+./babeld/xroute.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+babeld/%.o: ../babeld/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/bgpd/subdir.mk b/Debug/bgpd/subdir.mk
new file mode 100644
index 0000000..cfc04e4
--- /dev/null
+++ b/Debug/bgpd/subdir.mk
@@ -0,0 +1,102 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../bgpd/bgp_advertise.c \
+../bgpd/bgp_aspath.c \
+../bgpd/bgp_attr.c \
+../bgpd/bgp_btoa.c \
+../bgpd/bgp_clist.c \
+../bgpd/bgp_community.c \
+../bgpd/bgp_damp.c \
+../bgpd/bgp_debug.c \
+../bgpd/bgp_dump.c \
+../bgpd/bgp_ecommunity.c \
+../bgpd/bgp_filter.c \
+../bgpd/bgp_fsm.c \
+../bgpd/bgp_main.c \
+../bgpd/bgp_mpath.c \
+../bgpd/bgp_mplsvpn.c \
+../bgpd/bgp_network.c \
+../bgpd/bgp_nexthop.c \
+../bgpd/bgp_open.c \
+../bgpd/bgp_packet.c \
+../bgpd/bgp_regex.c \
+../bgpd/bgp_route.c \
+../bgpd/bgp_routemap.c \
+../bgpd/bgp_snmp.c \
+../bgpd/bgp_table.c \
+../bgpd/bgp_vty.c \
+../bgpd/bgp_zebra.c \
+../bgpd/bgpd.c
+
+OBJS += \
+./bgpd/bgp_advertise.o \
+./bgpd/bgp_aspath.o \
+./bgpd/bgp_attr.o \
+./bgpd/bgp_btoa.o \
+./bgpd/bgp_clist.o \
+./bgpd/bgp_community.o \
+./bgpd/bgp_damp.o \
+./bgpd/bgp_debug.o \
+./bgpd/bgp_dump.o \
+./bgpd/bgp_ecommunity.o \
+./bgpd/bgp_filter.o \
+./bgpd/bgp_fsm.o \
+./bgpd/bgp_main.o \
+./bgpd/bgp_mpath.o \
+./bgpd/bgp_mplsvpn.o \
+./bgpd/bgp_network.o \
+./bgpd/bgp_nexthop.o \
+./bgpd/bgp_open.o \
+./bgpd/bgp_packet.o \
+./bgpd/bgp_regex.o \
+./bgpd/bgp_route.o \
+./bgpd/bgp_routemap.o \
+./bgpd/bgp_snmp.o \
+./bgpd/bgp_table.o \
+./bgpd/bgp_vty.o \
+./bgpd/bgp_zebra.o \
+./bgpd/bgpd.o
+
+C_DEPS += \
+./bgpd/bgp_advertise.d \
+./bgpd/bgp_aspath.d \
+./bgpd/bgp_attr.d \
+./bgpd/bgp_btoa.d \
+./bgpd/bgp_clist.d \
+./bgpd/bgp_community.d \
+./bgpd/bgp_damp.d \
+./bgpd/bgp_debug.d \
+./bgpd/bgp_dump.d \
+./bgpd/bgp_ecommunity.d \
+./bgpd/bgp_filter.d \
+./bgpd/bgp_fsm.d \
+./bgpd/bgp_main.d \
+./bgpd/bgp_mpath.d \
+./bgpd/bgp_mplsvpn.d \
+./bgpd/bgp_network.d \
+./bgpd/bgp_nexthop.d \
+./bgpd/bgp_open.d \
+./bgpd/bgp_packet.d \
+./bgpd/bgp_regex.d \
+./bgpd/bgp_route.d \
+./bgpd/bgp_routemap.d \
+./bgpd/bgp_snmp.d \
+./bgpd/bgp_table.d \
+./bgpd/bgp_vty.d \
+./bgpd/bgp_zebra.d \
+./bgpd/bgpd.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+bgpd/%.o: ../bgpd/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/isisd/subdir.mk b/Debug/isisd/subdir.mk
new file mode 100644
index 0000000..f61fca2
--- /dev/null
+++ b/Debug/isisd/subdir.mk
@@ -0,0 +1,87 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../isisd/dict.c \
+../isisd/isis_adjacency.c \
+../isisd/isis_bpf.c \
+../isisd/isis_circuit.c \
+../isisd/isis_csm.c \
+../isisd/isis_dlpi.c \
+../isisd/isis_dr.c \
+../isisd/isis_dynhn.c \
+../isisd/isis_events.c \
+../isisd/isis_flags.c \
+../isisd/isis_lsp.c \
+../isisd/isis_main.c \
+../isisd/isis_misc.c \
+../isisd/isis_pdu.c \
+../isisd/isis_pfpacket.c \
+../isisd/isis_route.c \
+../isisd/isis_routemap.c \
+../isisd/isis_spf.c \
+../isisd/isis_tlv.c \
+../isisd/isis_zebra.c \
+../isisd/isisd.c \
+../isisd/iso_checksum.c
+
+OBJS += \
+./isisd/dict.o \
+./isisd/isis_adjacency.o \
+./isisd/isis_bpf.o \
+./isisd/isis_circuit.o \
+./isisd/isis_csm.o \
+./isisd/isis_dlpi.o \
+./isisd/isis_dr.o \
+./isisd/isis_dynhn.o \
+./isisd/isis_events.o \
+./isisd/isis_flags.o \
+./isisd/isis_lsp.o \
+./isisd/isis_main.o \
+./isisd/isis_misc.o \
+./isisd/isis_pdu.o \
+./isisd/isis_pfpacket.o \
+./isisd/isis_route.o \
+./isisd/isis_routemap.o \
+./isisd/isis_spf.o \
+./isisd/isis_tlv.o \
+./isisd/isis_zebra.o \
+./isisd/isisd.o \
+./isisd/iso_checksum.o
+
+C_DEPS += \
+./isisd/dict.d \
+./isisd/isis_adjacency.d \
+./isisd/isis_bpf.d \
+./isisd/isis_circuit.d \
+./isisd/isis_csm.d \
+./isisd/isis_dlpi.d \
+./isisd/isis_dr.d \
+./isisd/isis_dynhn.d \
+./isisd/isis_events.d \
+./isisd/isis_flags.d \
+./isisd/isis_lsp.d \
+./isisd/isis_main.d \
+./isisd/isis_misc.d \
+./isisd/isis_pdu.d \
+./isisd/isis_pfpacket.d \
+./isisd/isis_route.d \
+./isisd/isis_routemap.d \
+./isisd/isis_spf.d \
+./isisd/isis_tlv.d \
+./isisd/isis_zebra.d \
+./isisd/isisd.d \
+./isisd/iso_checksum.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+isisd/%.o: ../isisd/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/isisd/topology/subdir.mk b/Debug/isisd/topology/subdir.mk
new file mode 100644
index 0000000..53552a4
--- /dev/null
+++ b/Debug/isisd/topology/subdir.mk
@@ -0,0 +1,33 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../isisd/topology/random.c \
+../isisd/topology/spacyc.c \
+../isisd/topology/spgrid.c \
+../isisd/topology/sprand.c
+
+OBJS += \
+./isisd/topology/random.o \
+./isisd/topology/spacyc.o \
+./isisd/topology/spgrid.o \
+./isisd/topology/sprand.o
+
+C_DEPS += \
+./isisd/topology/random.d \
+./isisd/topology/spacyc.d \
+./isisd/topology/spgrid.d \
+./isisd/topology/sprand.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+isisd/topology/%.o: ../isisd/topology/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/lib/subdir.mk b/Debug/lib/subdir.mk
new file mode 100644
index 0000000..52e1cfe
--- /dev/null
+++ b/Debug/lib/subdir.mk
@@ -0,0 +1,141 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../lib/agentx.c \
+../lib/buffer.c \
+../lib/checksum.c \
+../lib/command.c \
+../lib/daemon.c \
+../lib/distribute.c \
+../lib/filter.c \
+../lib/getopt.c \
+../lib/getopt1.c \
+../lib/hash.c \
+../lib/if.c \
+../lib/if_rmap.c \
+../lib/jhash.c \
+../lib/keychain.c \
+../lib/linklist.c \
+../lib/log.c \
+../lib/md5.c \
+../lib/memory.c \
+../lib/memtypes.c \
+../lib/network.c \
+../lib/pid_output.c \
+../lib/plist.c \
+../lib/pqueue.c \
+../lib/prefix.c \
+../lib/privs.c \
+../lib/regex.c \
+../lib/routemap.c \
+../lib/sigevent.c \
+../lib/smux.c \
+../lib/snmp.c \
+../lib/sockopt.c \
+../lib/sockunion.c \
+../lib/str.c \
+../lib/stream.c \
+../lib/table.c \
+../lib/thread.c \
+../lib/vector.c \
+../lib/vty.c \
+../lib/workqueue.c \
+../lib/zclient.c
+
+OBJS += \
+./lib/agentx.o \
+./lib/buffer.o \
+./lib/checksum.o \
+./lib/command.o \
+./lib/daemon.o \
+./lib/distribute.o \
+./lib/filter.o \
+./lib/getopt.o \
+./lib/getopt1.o \
+./lib/hash.o \
+./lib/if.o \
+./lib/if_rmap.o \
+./lib/jhash.o \
+./lib/keychain.o \
+./lib/linklist.o \
+./lib/log.o \
+./lib/md5.o \
+./lib/memory.o \
+./lib/memtypes.o \
+./lib/network.o \
+./lib/pid_output.o \
+./lib/plist.o \
+./lib/pqueue.o \
+./lib/prefix.o \
+./lib/privs.o \
+./lib/regex.o \
+./lib/routemap.o \
+./lib/sigevent.o \
+./lib/smux.o \
+./lib/snmp.o \
+./lib/sockopt.o \
+./lib/sockunion.o \
+./lib/str.o \
+./lib/stream.o \
+./lib/table.o \
+./lib/thread.o \
+./lib/vector.o \
+./lib/vty.o \
+./lib/workqueue.o \
+./lib/zclient.o
+
+C_DEPS += \
+./lib/agentx.d \
+./lib/buffer.d \
+./lib/checksum.d \
+./lib/command.d \
+./lib/daemon.d \
+./lib/distribute.d \
+./lib/filter.d \
+./lib/getopt.d \
+./lib/getopt1.d \
+./lib/hash.d \
+./lib/if.d \
+./lib/if_rmap.d \
+./lib/jhash.d \
+./lib/keychain.d \
+./lib/linklist.d \
+./lib/log.d \
+./lib/md5.d \
+./lib/memory.d \
+./lib/memtypes.d \
+./lib/network.d \
+./lib/pid_output.d \
+./lib/plist.d \
+./lib/pqueue.d \
+./lib/prefix.d \
+./lib/privs.d \
+./lib/regex.d \
+./lib/routemap.d \
+./lib/sigevent.d \
+./lib/smux.d \
+./lib/snmp.d \
+./lib/sockopt.d \
+./lib/sockunion.d \
+./lib/str.d \
+./lib/stream.d \
+./lib/table.d \
+./lib/thread.d \
+./lib/vector.d \
+./lib/vty.d \
+./lib/workqueue.d \
+./lib/zclient.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+lib/%.o: ../lib/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/makefile b/Debug/makefile
new file mode 100644
index 0000000..9be894f
--- /dev/null
+++ b/Debug/makefile
@@ -0,0 +1,57 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+-include ../makefile.init
+
+RM := rm -rf
+
+# All of the sources participating in the build are defined here
+-include sources.mk
+-include zebra/subdir.mk
+-include watchquagga/subdir.mk
+-include vtysh/subdir.mk
+-include tests/subdir.mk
+-include ripngd/subdir.mk
+-include ripd/subdir.mk
+-include ospfd/subdir.mk
+-include ospfclient/subdir.mk
+-include ospf6d/subdir.mk
+-include lib/subdir.mk
+-include isisd/topology/subdir.mk
+-include isisd/subdir.mk
+-include bgpd/subdir.mk
+-include babeld/subdir.mk
+-include subdir.mk
+-include objects.mk
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+endif
+
+-include ../makefile.defs
+
+# Add inputs and outputs from these tool invocations to the build variables
+
+# All Target
+all: Quagga-dev
+
+# Tool invocations
+Quagga-dev: $(OBJS) $(USER_OBJS)
+ @echo 'Building target: $@'
+ @echo 'Invoking: GCC C Linker'
+ gcc -o "Quagga-dev" $(OBJS) $(USER_OBJS) $(LIBS)
+ @echo 'Finished building target: $@'
+ @echo ' '
+
+# Other Targets
+clean:
+ -$(RM) $(OBJS)$(C_DEPS)$(EXECUTABLES) Quagga-dev
+ -@echo ' '
+
+.PHONY: all clean dependents
+.SECONDARY:
+
+-include ../makefile.targets
diff --git a/Debug/objects.mk b/Debug/objects.mk
new file mode 100644
index 0000000..742c2da
--- /dev/null
+++ b/Debug/objects.mk
@@ -0,0 +1,8 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+USER_OBJS :=
+
+LIBS :=
+
diff --git a/Debug/ospf6d/subdir.mk b/Debug/ospf6d/subdir.mk
new file mode 100644
index 0000000..624674e
--- /dev/null
+++ b/Debug/ospf6d/subdir.mk
@@ -0,0 +1,78 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../ospf6d/ospf6_abr.c \
+../ospf6d/ospf6_area.c \
+../ospf6d/ospf6_asbr.c \
+../ospf6d/ospf6_flood.c \
+../ospf6d/ospf6_interface.c \
+../ospf6d/ospf6_intra.c \
+../ospf6d/ospf6_lsa.c \
+../ospf6d/ospf6_lsdb.c \
+../ospf6d/ospf6_main.c \
+../ospf6d/ospf6_message.c \
+../ospf6d/ospf6_neighbor.c \
+../ospf6d/ospf6_network.c \
+../ospf6d/ospf6_proto.c \
+../ospf6d/ospf6_route.c \
+../ospf6d/ospf6_snmp.c \
+../ospf6d/ospf6_spf.c \
+../ospf6d/ospf6_top.c \
+../ospf6d/ospf6_zebra.c \
+../ospf6d/ospf6d.c
+
+OBJS += \
+./ospf6d/ospf6_abr.o \
+./ospf6d/ospf6_area.o \
+./ospf6d/ospf6_asbr.o \
+./ospf6d/ospf6_flood.o \
+./ospf6d/ospf6_interface.o \
+./ospf6d/ospf6_intra.o \
+./ospf6d/ospf6_lsa.o \
+./ospf6d/ospf6_lsdb.o \
+./ospf6d/ospf6_main.o \
+./ospf6d/ospf6_message.o \
+./ospf6d/ospf6_neighbor.o \
+./ospf6d/ospf6_network.o \
+./ospf6d/ospf6_proto.o \
+./ospf6d/ospf6_route.o \
+./ospf6d/ospf6_snmp.o \
+./ospf6d/ospf6_spf.o \
+./ospf6d/ospf6_top.o \
+./ospf6d/ospf6_zebra.o \
+./ospf6d/ospf6d.o
+
+C_DEPS += \
+./ospf6d/ospf6_abr.d \
+./ospf6d/ospf6_area.d \
+./ospf6d/ospf6_asbr.d \
+./ospf6d/ospf6_flood.d \
+./ospf6d/ospf6_interface.d \
+./ospf6d/ospf6_intra.d \
+./ospf6d/ospf6_lsa.d \
+./ospf6d/ospf6_lsdb.d \
+./ospf6d/ospf6_main.d \
+./ospf6d/ospf6_message.d \
+./ospf6d/ospf6_neighbor.d \
+./ospf6d/ospf6_network.d \
+./ospf6d/ospf6_proto.d \
+./ospf6d/ospf6_route.d \
+./ospf6d/ospf6_snmp.d \
+./ospf6d/ospf6_spf.d \
+./ospf6d/ospf6_top.d \
+./ospf6d/ospf6_zebra.d \
+./ospf6d/ospf6d.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+ospf6d/%.o: ../ospf6d/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/ospfclient/subdir.mk b/Debug/ospfclient/subdir.mk
new file mode 100644
index 0000000..870eb6c
--- /dev/null
+++ b/Debug/ospfclient/subdir.mk
@@ -0,0 +1,27 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../ospfclient/ospf_apiclient.c \
+../ospfclient/ospfclient.c
+
+OBJS += \
+./ospfclient/ospf_apiclient.o \
+./ospfclient/ospfclient.o
+
+C_DEPS += \
+./ospfclient/ospf_apiclient.d \
+./ospfclient/ospfclient.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+ospfclient/%.o: ../ospfclient/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/ospfd/subdir.mk b/Debug/ospfd/subdir.mk
new file mode 100644
index 0000000..3a6d54a
--- /dev/null
+++ b/Debug/ospfd/subdir.mk
@@ -0,0 +1,99 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../ospfd/ospf_abr.c \
+../ospfd/ospf_api.c \
+../ospfd/ospf_apiserver.c \
+../ospfd/ospf_asbr.c \
+../ospfd/ospf_ase.c \
+../ospfd/ospf_dump.c \
+../ospfd/ospf_flood.c \
+../ospfd/ospf_ia.c \
+../ospfd/ospf_interface.c \
+../ospfd/ospf_ism.c \
+../ospfd/ospf_lsa.c \
+../ospfd/ospf_lsdb.c \
+../ospfd/ospf_main.c \
+../ospfd/ospf_neighbor.c \
+../ospfd/ospf_network.c \
+../ospfd/ospf_nsm.c \
+../ospfd/ospf_opaque.c \
+../ospfd/ospf_packet.c \
+../ospfd/ospf_route.c \
+../ospfd/ospf_routemap.c \
+../ospfd/ospf_snmp.c \
+../ospfd/ospf_spf.c \
+../ospfd/ospf_te.c \
+../ospfd/ospf_vty.c \
+../ospfd/ospf_zebra.c \
+../ospfd/ospfd.c
+
+OBJS += \
+./ospfd/ospf_abr.o \
+./ospfd/ospf_api.o \
+./ospfd/ospf_apiserver.o \
+./ospfd/ospf_asbr.o \
+./ospfd/ospf_ase.o \
+./ospfd/ospf_dump.o \
+./ospfd/ospf_flood.o \
+./ospfd/ospf_ia.o \
+./ospfd/ospf_interface.o \
+./ospfd/ospf_ism.o \
+./ospfd/ospf_lsa.o \
+./ospfd/ospf_lsdb.o \
+./ospfd/ospf_main.o \
+./ospfd/ospf_neighbor.o \
+./ospfd/ospf_network.o \
+./ospfd/ospf_nsm.o \
+./ospfd/ospf_opaque.o \
+./ospfd/ospf_packet.o \
+./ospfd/ospf_route.o \
+./ospfd/ospf_routemap.o \
+./ospfd/ospf_snmp.o \
+./ospfd/ospf_spf.o \
+./ospfd/ospf_te.o \
+./ospfd/ospf_vty.o \
+./ospfd/ospf_zebra.o \
+./ospfd/ospfd.o
+
+C_DEPS += \
+./ospfd/ospf_abr.d \
+./ospfd/ospf_api.d \
+./ospfd/ospf_apiserver.d \
+./ospfd/ospf_asbr.d \
+./ospfd/ospf_ase.d \
+./ospfd/ospf_dump.d \
+./ospfd/ospf_flood.d \
+./ospfd/ospf_ia.d \
+./ospfd/ospf_interface.d \
+./ospfd/ospf_ism.d \
+./ospfd/ospf_lsa.d \
+./ospfd/ospf_lsdb.d \
+./ospfd/ospf_main.d \
+./ospfd/ospf_neighbor.d \
+./ospfd/ospf_network.d \
+./ospfd/ospf_nsm.d \
+./ospfd/ospf_opaque.d \
+./ospfd/ospf_packet.d \
+./ospfd/ospf_route.d \
+./ospfd/ospf_routemap.d \
+./ospfd/ospf_snmp.d \
+./ospfd/ospf_spf.d \
+./ospfd/ospf_te.d \
+./ospfd/ospf_vty.d \
+./ospfd/ospf_zebra.d \
+./ospfd/ospfd.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+ospfd/%.o: ../ospfd/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/ripd/subdir.mk b/Debug/ripd/subdir.mk
new file mode 100644
index 0000000..186a2f5
--- /dev/null
+++ b/Debug/ripd/subdir.mk
@@ -0,0 +1,48 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../ripd/rip_debug.c \
+../ripd/rip_interface.c \
+../ripd/rip_main.c \
+../ripd/rip_offset.c \
+../ripd/rip_peer.c \
+../ripd/rip_routemap.c \
+../ripd/rip_snmp.c \
+../ripd/rip_zebra.c \
+../ripd/ripd.c
+
+OBJS += \
+./ripd/rip_debug.o \
+./ripd/rip_interface.o \
+./ripd/rip_main.o \
+./ripd/rip_offset.o \
+./ripd/rip_peer.o \
+./ripd/rip_routemap.o \
+./ripd/rip_snmp.o \
+./ripd/rip_zebra.o \
+./ripd/ripd.o
+
+C_DEPS += \
+./ripd/rip_debug.d \
+./ripd/rip_interface.d \
+./ripd/rip_main.d \
+./ripd/rip_offset.d \
+./ripd/rip_peer.d \
+./ripd/rip_routemap.d \
+./ripd/rip_snmp.d \
+./ripd/rip_zebra.d \
+./ripd/ripd.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+ripd/%.o: ../ripd/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/ripngd/subdir.mk b/Debug/ripngd/subdir.mk
new file mode 100644
index 0000000..c43e539
--- /dev/null
+++ b/Debug/ripngd/subdir.mk
@@ -0,0 +1,51 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../ripngd/ripng_debug.c \
+../ripngd/ripng_interface.c \
+../ripngd/ripng_main.c \
+../ripngd/ripng_nexthop.c \
+../ripngd/ripng_offset.c \
+../ripngd/ripng_peer.c \
+../ripngd/ripng_route.c \
+../ripngd/ripng_routemap.c \
+../ripngd/ripng_zebra.c \
+../ripngd/ripngd.c
+
+OBJS += \
+./ripngd/ripng_debug.o \
+./ripngd/ripng_interface.o \
+./ripngd/ripng_main.o \
+./ripngd/ripng_nexthop.o \
+./ripngd/ripng_offset.o \
+./ripngd/ripng_peer.o \
+./ripngd/ripng_route.o \
+./ripngd/ripng_routemap.o \
+./ripngd/ripng_zebra.o \
+./ripngd/ripngd.o
+
+C_DEPS += \
+./ripngd/ripng_debug.d \
+./ripngd/ripng_interface.d \
+./ripngd/ripng_main.d \
+./ripngd/ripng_nexthop.d \
+./ripngd/ripng_offset.d \
+./ripngd/ripng_peer.d \
+./ripngd/ripng_route.d \
+./ripngd/ripng_routemap.d \
+./ripngd/ripng_zebra.d \
+./ripngd/ripngd.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+ripngd/%.o: ../ripngd/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/sources.mk b/Debug/sources.mk
new file mode 100644
index 0000000..975e9bd
--- /dev/null
+++ b/Debug/sources.mk
@@ -0,0 +1,30 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+O_SRCS :=
+C_SRCS :=
+S_UPPER_SRCS :=
+OBJ_SRCS :=
+ASM_SRCS :=
+OBJS :=
+C_DEPS :=
+EXECUTABLES :=
+
+# Every subdirectory with source files must be described here
+SUBDIRS := \
+zebra \
+watchquagga \
+vtysh \
+tests \
+ripngd \
+ripd \
+ospfd \
+ospfclient \
+ospf6d \
+lib \
+isisd/topology \
+isisd \
+bgpd \
+babeld \
+
diff --git a/Debug/tests/subdir.mk b/Debug/tests/subdir.mk
new file mode 100644
index 0000000..2643092
--- /dev/null
+++ b/Debug/tests/subdir.mk
@@ -0,0 +1,87 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../tests/aspath_test.c \
+../tests/bgp_capability_test.c \
+../tests/bgp_mp_attr_test.c \
+../tests/bgp_mpath_test.c \
+../tests/ecommunity_test.c \
+../tests/heavy-thread.c \
+../tests/heavy-wq.c \
+../tests/heavy.c \
+../tests/main.c \
+../tests/prng.c \
+../tests/table_test.c \
+../tests/test-buffer.c \
+../tests/test-checksum.c \
+../tests/test-commands.c \
+../tests/test-memory.c \
+../tests/test-nexthop-iter.c \
+../tests/test-privs.c \
+../tests/test-segv.c \
+../tests/test-sig.c \
+../tests/test-stream.c \
+../tests/test-timer-correctness.c \
+../tests/test-timer-performance.c
+
+OBJS += \
+./tests/aspath_test.o \
+./tests/bgp_capability_test.o \
+./tests/bgp_mp_attr_test.o \
+./tests/bgp_mpath_test.o \
+./tests/ecommunity_test.o \
+./tests/heavy-thread.o \
+./tests/heavy-wq.o \
+./tests/heavy.o \
+./tests/main.o \
+./tests/prng.o \
+./tests/table_test.o \
+./tests/test-buffer.o \
+./tests/test-checksum.o \
+./tests/test-commands.o \
+./tests/test-memory.o \
+./tests/test-nexthop-iter.o \
+./tests/test-privs.o \
+./tests/test-segv.o \
+./tests/test-sig.o \
+./tests/test-stream.o \
+./tests/test-timer-correctness.o \
+./tests/test-timer-performance.o
+
+C_DEPS += \
+./tests/aspath_test.d \
+./tests/bgp_capability_test.d \
+./tests/bgp_mp_attr_test.d \
+./tests/bgp_mpath_test.d \
+./tests/ecommunity_test.d \
+./tests/heavy-thread.d \
+./tests/heavy-wq.d \
+./tests/heavy.d \
+./tests/main.d \
+./tests/prng.d \
+./tests/table_test.d \
+./tests/test-buffer.d \
+./tests/test-checksum.d \
+./tests/test-commands.d \
+./tests/test-memory.d \
+./tests/test-nexthop-iter.d \
+./tests/test-privs.d \
+./tests/test-segv.d \
+./tests/test-sig.d \
+./tests/test-stream.d \
+./tests/test-timer-correctness.d \
+./tests/test-timer-performance.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+tests/%.o: ../tests/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/vtysh/subdir.mk b/Debug/vtysh/subdir.mk
new file mode 100644
index 0000000..4024316
--- /dev/null
+++ b/Debug/vtysh/subdir.mk
@@ -0,0 +1,33 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../vtysh/vtysh.c \
+../vtysh/vtysh_config.c \
+../vtysh/vtysh_main.c \
+../vtysh/vtysh_user.c
+
+OBJS += \
+./vtysh/vtysh.o \
+./vtysh/vtysh_config.o \
+./vtysh/vtysh_main.o \
+./vtysh/vtysh_user.o
+
+C_DEPS += \
+./vtysh/vtysh.d \
+./vtysh/vtysh_config.d \
+./vtysh/vtysh_main.d \
+./vtysh/vtysh_user.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+vtysh/%.o: ../vtysh/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/watchquagga/subdir.mk b/Debug/watchquagga/subdir.mk
new file mode 100644
index 0000000..e98b400
--- /dev/null
+++ b/Debug/watchquagga/subdir.mk
@@ -0,0 +1,24 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../watchquagga/watchquagga.c
+
+OBJS += \
+./watchquagga/watchquagga.o
+
+C_DEPS += \
+./watchquagga/watchquagga.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+watchquagga/%.o: ../watchquagga/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Debug/zebra/subdir.mk b/Debug/zebra/subdir.mk
new file mode 100644
index 0000000..3cf7add
--- /dev/null
+++ b/Debug/zebra/subdir.mk
@@ -0,0 +1,156 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../zebra/client_main.c \
+../zebra/connected.c \
+../zebra/debug.c \
+../zebra/if_ioctl.c \
+../zebra/if_ioctl_solaris.c \
+../zebra/if_netlink.c \
+../zebra/if_proc.c \
+../zebra/if_sysctl.c \
+../zebra/interface.c \
+../zebra/ioctl.c \
+../zebra/ioctl_null.c \
+../zebra/ioctl_solaris.c \
+../zebra/ipforward_aix.c \
+../zebra/ipforward_ews.c \
+../zebra/ipforward_proc.c \
+../zebra/ipforward_solaris.c \
+../zebra/ipforward_sysctl.c \
+../zebra/irdp_interface.c \
+../zebra/irdp_main.c \
+../zebra/irdp_packet.c \
+../zebra/kernel_netlink.c \
+../zebra/kernel_null.c \
+../zebra/kernel_socket.c \
+../zebra/main.c \
+../zebra/misc_null.c \
+../zebra/mtu_kvm.c \
+../zebra/redistribute.c \
+../zebra/redistribute_null.c \
+../zebra/router-id.c \
+../zebra/rt_ioctl.c \
+../zebra/rt_netlink.c \
+../zebra/rt_socket.c \
+../zebra/rtadv.c \
+../zebra/rtread_getmsg.c \
+../zebra/rtread_netlink.c \
+../zebra/rtread_proc.c \
+../zebra/rtread_sysctl.c \
+../zebra/test_main.c \
+../zebra/zebra_fpm.c \
+../zebra/zebra_fpm_netlink.c \
+../zebra/zebra_rib.c \
+../zebra/zebra_routemap.c \
+../zebra/zebra_snmp.c \
+../zebra/zebra_vty.c \
+../zebra/zserv.c
+
+OBJS += \
+./zebra/client_main.o \
+./zebra/connected.o \
+./zebra/debug.o \
+./zebra/if_ioctl.o \
+./zebra/if_ioctl_solaris.o \
+./zebra/if_netlink.o \
+./zebra/if_proc.o \
+./zebra/if_sysctl.o \
+./zebra/interface.o \
+./zebra/ioctl.o \
+./zebra/ioctl_null.o \
+./zebra/ioctl_solaris.o \
+./zebra/ipforward_aix.o \
+./zebra/ipforward_ews.o \
+./zebra/ipforward_proc.o \
+./zebra/ipforward_solaris.o \
+./zebra/ipforward_sysctl.o \
+./zebra/irdp_interface.o \
+./zebra/irdp_main.o \
+./zebra/irdp_packet.o \
+./zebra/kernel_netlink.o \
+./zebra/kernel_null.o \
+./zebra/kernel_socket.o \
+./zebra/main.o \
+./zebra/misc_null.o \
+./zebra/mtu_kvm.o \
+./zebra/redistribute.o \
+./zebra/redistribute_null.o \
+./zebra/router-id.o \
+./zebra/rt_ioctl.o \
+./zebra/rt_netlink.o \
+./zebra/rt_socket.o \
+./zebra/rtadv.o \
+./zebra/rtread_getmsg.o \
+./zebra/rtread_netlink.o \
+./zebra/rtread_proc.o \
+./zebra/rtread_sysctl.o \
+./zebra/test_main.o \
+./zebra/zebra_fpm.o \
+./zebra/zebra_fpm_netlink.o \
+./zebra/zebra_rib.o \
+./zebra/zebra_routemap.o \
+./zebra/zebra_snmp.o \
+./zebra/zebra_vty.o \
+./zebra/zserv.o
+
+C_DEPS += \
+./zebra/client_main.d \
+./zebra/connected.d \
+./zebra/debug.d \
+./zebra/if_ioctl.d \
+./zebra/if_ioctl_solaris.d \
+./zebra/if_netlink.d \
+./zebra/if_proc.d \
+./zebra/if_sysctl.d \
+./zebra/interface.d \
+./zebra/ioctl.d \
+./zebra/ioctl_null.d \
+./zebra/ioctl_solaris.d \
+./zebra/ipforward_aix.d \
+./zebra/ipforward_ews.d \
+./zebra/ipforward_proc.d \
+./zebra/ipforward_solaris.d \
+./zebra/ipforward_sysctl.d \
+./zebra/irdp_interface.d \
+./zebra/irdp_main.d \
+./zebra/irdp_packet.d \
+./zebra/kernel_netlink.d \
+./zebra/kernel_null.d \
+./zebra/kernel_socket.d \
+./zebra/main.d \
+./zebra/misc_null.d \
+./zebra/mtu_kvm.d \
+./zebra/redistribute.d \
+./zebra/redistribute_null.d \
+./zebra/router-id.d \
+./zebra/rt_ioctl.d \
+./zebra/rt_netlink.d \
+./zebra/rt_socket.d \
+./zebra/rtadv.d \
+./zebra/rtread_getmsg.d \
+./zebra/rtread_netlink.d \
+./zebra/rtread_proc.d \
+./zebra/rtread_sysctl.d \
+./zebra/test_main.d \
+./zebra/zebra_fpm.d \
+./zebra/zebra_fpm_netlink.d \
+./zebra/zebra_rib.d \
+./zebra/zebra_routemap.d \
+./zebra/zebra_snmp.d \
+./zebra/zebra_vty.d \
+./zebra/zserv.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+zebra/%.o: ../zebra/%.c
+ @echo 'Building file: $<'
+ @echo 'Invoking: GCC C Compiler'
+ gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/bgpd/bgp_advertise.c b/bgpd/bgp_advertise.c
index e0fa58d..3ceddd7 100644
--- a/bgpd/bgp_advertise.c
+++ b/bgpd/bgp_advertise.c
@@ -220,6 +220,8 @@
struct bgp_adj_out *adj = NULL;
struct bgp_advertise *adv;
+
+
if (DISABLE_BGP_ANNOUNCE)
return;
@@ -236,10 +238,12 @@
adj = XCALLOC (MTYPE_BGP_ADJ_OUT, sizeof (struct bgp_adj_out));
adj->peer = peer_lock (peer); /* adj_out peer reference */
+
if (rn)
{
BGP_ADJ_OUT_ADD (rn, adj);
bgp_lock_node (rn);
+
}
}
@@ -248,12 +252,14 @@
adj->adv = bgp_advertise_new ();
+
adv = adj->adv;
adv->rn = rn;
assert (adv->binfo == NULL);
adv->binfo = bgp_info_lock (binfo); /* bgp_info adj_out reference */
+
if (attr)
adv->baa = bgp_advertise_intern (peer->hash[afi][safi], attr);
else
@@ -264,6 +270,7 @@
bgp_advertise_add (adv->baa, adv);
FIFO_ADD (&peer->sync[afi][safi]->update, &adv->fifo);
+
}
void
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index e7357e5..4f01916 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -1304,6 +1304,8 @@
{
struct bgp_info *old;
struct bgp_info *new;
+ struct bgp_info *new_best_external;
+ struct bgp_info *old_best_external;
};
static void
@@ -1311,6 +1313,7 @@
struct bgp_maxpaths_cfg *mpath_cfg,
struct bgp_info_pair *result)
{
+
struct bgp_info *new_select;
struct bgp_info *old_select;
struct bgp_info *ri;
@@ -1319,6 +1322,9 @@
struct bgp_info *nextri = NULL;
int paths_eq, do_mpath;
struct list mp_list;
+
+ struct bgp_info *new_best_external;
+ struct bgp_info *old_best_external;
bgp_mp_list_init (&mp_list);
do_mpath = (mpath_cfg->maxpaths_ebgp != BGP_DEFAULT_MAXPATHS ||
@@ -1376,11 +1382,16 @@
bgp_mp_list_clear (&mp_list);
}
+
+
/* Check old selected route and new selected route. */
old_select = NULL;
new_select = NULL;
+ new_best_external = NULL;
+ old_best_external = NULL;
for (ri = rn->info; (ri != NULL) && (nextri = ri->next, 1); ri = nextri)
{
+
if (CHECK_FLAG (ri->flags, BGP_INFO_SELECTED))
old_select = ri;
@@ -1405,7 +1416,9 @@
bgp_info_unset_flag (rn, ri, BGP_INFO_DMED_CHECK);
bgp_info_unset_flag (rn, ri, BGP_INFO_DMED_SELECTED);
- if (bgp_info_cmp (bgp, ri, new_select, &paths_eq))
+
+
+ if (bgp_info_cmp (bgp, ri, new_select, &paths_eq))
{
if (do_mpath && bgp_flag_check (bgp, BGP_FLAG_DETERMINISTIC_MED))
bgp_mp_dmed_deselect (new_select);
@@ -1423,6 +1436,25 @@
if (do_mpath && paths_eq)
bgp_mp_list_add (&mp_list, ri);
+
+ /*BGP BEST EXTERNAL Feature*/
+
+
+ if (CHECK_FLAG (ri->flags, BGP_INFO_BEST_EXTERNAL))
+ old_best_external = ri;
+
+ if ((ri) && ((ri->peer->as) && (ri->peer->as != ri->peer->local_as)))
+ {
+ if (bgp_info_cmp (bgp, ri, new_best_external, &paths_eq))
+ {
+ new_best_external = ri;
+
+ }
+
+ }
+
+ /*BGP BEST EXTERNAL Feature*/
+
}
@@ -1434,6 +1466,8 @@
result->old = old_select;
result->new = new_select;
+ result->new_best_external = new_best_external;
+ result->old_best_external = old_best_external;
return;
}
@@ -1470,9 +1504,13 @@
/* Announcement to peer->conf. If the route is filtered,
withdraw it. */
if (selected && bgp_announce_check (selected, peer, p, &attr, afi, safi))
- bgp_adj_out_set (rn, peer, p, &attr, afi, safi, selected);
+ {
+ bgp_adj_out_set (rn, peer, p, &attr, afi, safi, selected);
+ }
else
+ {
bgp_adj_out_unset (rn, peer, p, afi, safi);
+ }
break;
case BGP_TABLE_RSCLIENT:
/* Announcement to peer->conf. If the route is filtered,
@@ -1558,6 +1596,7 @@
return WQ_SUCCESS;
}
+
static wq_item_status
bgp_process_main (struct work_queue *wq, void *data)
{
@@ -1571,12 +1610,67 @@
struct bgp_info *old_select;
struct bgp_info_pair old_and_new;
struct listnode *node, *nnode;
- struct peer *peer;
-
+// struct peer *peer;
+
+ struct bgp_info *new_best_external;
+ struct bgp_info *old_best_external;
+
/* Best path selection. */
bgp_best_selection (bgp, rn, &bgp->maxpaths[afi][safi], &old_and_new);
old_select = old_and_new.old;
new_select = old_and_new.new;
+ new_best_external = old_and_new.new_best_external;
+ old_best_external = old_and_new.old_best_external;
+
+ /*BEST EXTERNAL */
+ if((bgp_flag_check (bgp, BGP_FLAG_ADVERTISE_BEST_EXTERNAL )) && (new_best_external))
+ {
+ if( old_best_external != new_best_external)
+ {
+
+ for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
+ {
+ if(bgp->as == peer->as)
+ {
+ bgp_process_announce_selected (peer, new_best_external, rn, afi, safi);
+ bgp_info_set_flag (rn, new_best_external, BGP_INFO_BEST_EXTERNAL);
+ }
+ }
+
+ }
+ else { /*zlog_info("Bgp MAIN BEST EXTERNAL NOTHING TO DO .");*/ }
+
+ }
+ else
+ {
+ if(!(bgp_flag_check (bgp, BGP_FLAG_ADVERTISE_BEST_EXTERNAL )))
+ {
+ if ( (new_best_external) && (CHECK_FLAG (new_best_external->flags, BGP_INFO_BEST_EXTERNAL)))
+
+ {
+ if (CHECK_FLAG (new_best_external->flags, BGP_INFO_SELECTED))
+ {
+ bgp_info_unset_flag (rn, new_best_external, BGP_INFO_BEST_EXTERNAL);
+ }
+ else
+ {
+ for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
+ {
+ if(bgp->as == peer->as)
+ {
+ bgp_adj_out_unset(rn, peer, &rn->p, afi, safi);
+ }
+ }
+ bgp_info_unset_flag (rn, new_best_external, BGP_INFO_BEST_EXTERNAL);
+ }
+
+ }
+ }
+
+ }
+
+
+ /*BEST EXTERNAL END*/
/* Nothing to do. */
if (old_select && old_select == new_select)
@@ -1593,15 +1687,17 @@
}
}
+
+
if (old_select)
bgp_info_unset_flag (rn, old_select, BGP_INFO_SELECTED);
+
if (new_select)
{
bgp_info_set_flag (rn, new_select, BGP_INFO_SELECTED);
bgp_info_unset_flag (rn, new_select, BGP_INFO_ATTR_CHANGED);
UNSET_FLAG (new_select->flags, BGP_INFO_MULTIPATH_CHG);
}
-
/* Check each BGP peer. */
for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
@@ -1617,21 +1713,23 @@
&& new_select->type == ZEBRA_ROUTE_BGP
&& new_select->sub_type == BGP_ROUTE_NORMAL)
bgp_zebra_announce (p, new_select, bgp, safi);
+
else
{
/* Withdraw the route from the kernel. */
if (old_select
&& old_select->type == ZEBRA_ROUTE_BGP
- && old_select->sub_type == BGP_ROUTE_NORMAL)
+ && old_select->sub_type == BGP_ROUTE_NORMAL){
bgp_zebra_withdraw (p, old_select, safi);
+ }
}
}
/* Reap old select bgp_info, it it has been removed */
if (old_select && CHECK_FLAG (old_select->flags, BGP_INFO_REMOVED))
- bgp_info_reap (rn, old_select);
-
- UNSET_FLAG (rn->flags, BGP_NODE_PROCESS_SCHEDULED);
+ bgp_info_reap (rn, old_select);
+
+ UNSET_FLAG (rn->flags, BGP_NODE_PROCESS_SCHEDULED);
return WQ_SUCCESS;
}
@@ -1828,6 +1926,7 @@
/* apply dampening, if result is suppressed, we'll be retaining
* the bgp_info in the RIB for historical reference.
*/
+
if (CHECK_FLAG (peer->bgp->af_flags[afi][safi], BGP_CONFIG_DAMPENING)
&& peer->sort == BGP_PEER_EBGP)
if ( (status = bgp_damp_withdraw (ri, rn, afi, safi, 0))
@@ -2597,7 +2696,7 @@
for (rn = bgp_table_top (table); rn; rn = bgp_route_next(rn))
for (ri = rn->info; ri; ri = ri->next)
- if (CHECK_FLAG (ri->flags, BGP_INFO_SELECTED) && ri->peer != peer)
+ if (((CHECK_FLAG (ri->flags, BGP_INFO_SELECTED)) || (CHECK_FLAG (ri->flags, BGP_INFO_BEST_EXTERNAL))) && (ri->peer != peer))
{
if ( (rsclient) ?
(bgp_announce_check_rsclient (ri, peer, &rn->p, &attr, afi, safi))
@@ -2727,6 +2826,7 @@
void
bgp_soft_reconfig_in (struct peer *peer, afi_t afi, safi_t safi)
{
+
struct bgp_node *rn;
struct bgp_table *table;
@@ -5637,6 +5737,10 @@
else
vty_out (vty, " ");
+ /* Best External route. */
+ if (CHECK_FLAG (binfo->flags, BGP_INFO_BEST_EXTERNAL))
+ vty_out (vty, "x");
+
/* Internal route. */
if ((binfo->peer->as) && (binfo->peer->as == binfo->peer->local_as))
vty_out (vty, "i");
@@ -6121,7 +6225,8 @@
#define BGP_SHOW_SCODE_HEADER "Status codes: s suppressed, d damped, "\
"h history, * valid, > best, = multipath,%s"\
- " i internal, r RIB-failure, S Stale, R Removed%s"
+ " i internal, r RIB-failure, S Stale, R Removed%s" \
+ " b backup path, x best-external%s"
#define BGP_SHOW_OCODE_HEADER "Origin codes: i - IGP, e - EGP, ? - incomplete%s%s"
#define BGP_SHOW_HEADER " Network Next Hop Metric LocPrf Weight Path%s"
#define BGP_SHOW_DAMP_HEADER " Network From Reuse Path%s"
diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h
index 3d2eea5..a3142bd 100644
--- a/bgpd/bgp_route.h
+++ b/bgpd/bgp_route.h
@@ -79,9 +79,10 @@
#define BGP_INFO_DMED_SELECTED (1 << 7)
#define BGP_INFO_STALE (1 << 8)
#define BGP_INFO_REMOVED (1 << 9)
-#define BGP_INFO_COUNTED (1 << 10)
+#define BGP_INFO_COUNTED (1 << 10)
#define BGP_INFO_MULTIPATH (1 << 11)
#define BGP_INFO_MULTIPATH_CHG (1 << 12)
+#define BGP_INFO_BEST_EXTERNAL (1 << 13)
/* BGP route type. This can be static, RIP, OSPF, BGP etc. */
u_char type;
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index ca44774..6da297f 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -9020,6 +9020,37 @@
"Pointer to route-map entries\n")
#endif /* HAVE_IPV6 */
+DEFUN (bgp_advertise_best_external,
+ bgp_advertise_best_external_cmd,
+ "bgp advertise-best-external",
+ "BGP specific commands\n"
+ "Advertise best external path to internal peers\n")
+{
+ struct bgp *bgp;
+
+ bgp = vty->index;
+ bgp_flag_set (bgp, BGP_FLAG_ADVERTISE_BEST_EXTERNAL);
+
+
+
+ return CMD_SUCCESS;
+}
+
+DEFUN (no_bgp_advertise_best_external,
+ no_bgp_advertise_best_external_cmd,
+ "no bgp advertise-best-external",
+ NO_STR
+ "BGP specific commands\n"
+ "Advertise best external path to internal peers\n")
+{
+ struct bgp *bgp;
+
+ bgp = vty->index;
+ bgp_flag_unset (bgp, BGP_FLAG_ADVERTISE_BEST_EXTERNAL);
+ return CMD_SUCCESS;
+}
+
+
int
bgp_config_write_redistribute (struct vty *vty, struct bgp *bgp, afi_t afi,
safi_t safi, int *write)
@@ -10235,6 +10266,16 @@
/* Community-list. */
community_list_vty ();
+
+ /* "bgp advertise-best-external" commands*/
+ install_element (BGP_NODE, &bgp_advertise_best_external_cmd);
+ install_element (BGP_NODE, &no_bgp_advertise_best_external_cmd);
+ install_element (BGP_IPV4_NODE, &bgp_advertise_best_external_cmd);
+ install_element (BGP_IPV4_NODE, &no_bgp_advertise_best_external_cmd);
+ install_element (BGP_IPV6_NODE, &bgp_advertise_best_external_cmd);
+ install_element (BGP_IPV6_NODE, &no_bgp_advertise_best_external_cmd);
+ install_element (BGP_VPNV4_NODE, &bgp_advertise_best_external_cmd);
+ install_element (BGP_VPNV4_NODE, &no_bgp_advertise_best_external_cmd);
}
#include "memory.h"
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index d72708e..11c91ad 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -5265,6 +5265,9 @@
if (bgp_flag_check (bgp, BGP_FLAG_ALWAYS_COMPARE_MED))
vty_out (vty, " bgp always-compare-med%s", VTY_NEWLINE);
+ if (bgp_flag_check (bgp, BGP_FLAG_ADVERTISE_BEST_EXTERNAL))
+ vty_out (vty, " bgp advertise-best-external%s", VTY_NEWLINE);
+
/* BGP default ipv4-unicast. */
if (bgp_flag_check (bgp, BGP_FLAG_NO_DEFAULT_IPV4))
vty_out (vty, " no bgp default ipv4-unicast%s", VTY_NEWLINE);
diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h
index 40c381c..bf44160 100644
--- a/bgpd/bgpd.h
+++ b/bgpd/bgpd.h
@@ -123,6 +123,7 @@
#define BGP_FLAG_GRACEFUL_RESTART (1 << 12)
#define BGP_FLAG_ASPATH_CONFED (1 << 13)
#define BGP_FLAG_ASPATH_MULTIPATH_RELAX (1 << 14)
+#define BGP_FLAG_ADVERTISE_BEST_EXTERNAL (1 << 15)
/* BGP Per AF flags */
u_int16_t af_flags[AFI_MAX][SAFI_MAX];
diff --git a/lib/workqueue.h b/lib/workqueue.h
index f59499a..afc2571 100644
--- a/lib/workqueue.h
+++ b/lib/workqueue.h
@@ -69,8 +69,8 @@
* First argument is the workqueue queue.
* Second argument is the item data
*/
- wq_item_status (*workfunc) (struct work_queue *, void *);
+ wq_item_status (*workfunc) (struct work_queue *, void *);
/* error handling function, optional */
void (*errorfunc) (struct work_queue *, struct work_queue_item *);
_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev