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

Reply via email to