VOL-2934: ONL In Band Management support
	- Makefile changes to build Integrated ONL image with
	  BAL, Openolt agent and Inband startup scripts.
	- Inband startup scripts enable single Inband channel, creates
	  inband tagged interfaces, allocates IP to them then start
	  dev_mgmt_daemon and Openolt services.
	- Openolt gRPC server will be listening on inband interface IP.
	- Readme file update with Inband ONL build procedure.

Change-Id: Ia441151d13fd55c331f74d2e8794b44d299549fd
diff --git a/agent/Makefile.in b/agent/Makefile.in
index 6068c4e..3cbe94d 100644
--- a/agent/Makefile.in
+++ b/agent/Makefile.in
@@ -44,6 +44,10 @@
 # openolt.proto and tech_profile.proto
 OPENOLT_PROTO_VER ?= v3.3.4
 
+# Variables used for Inband build
+INBAND = "n"
+VLAN_ID = 4093
+
 #
 # Build directory
 BUILD_DIR = build
@@ -143,7 +147,11 @@
 		git clone https://github.com/opencomputeproject/OpenNetworkLinux.git $(ONL_DIR)/OpenNetworkLinux; \
 		cp download/Makefile.onl $(ONL_DIR)/Makefile; \
 		install -m 755 download/build-onl.sh $(ONL_DIR)/OpenNetworkLinux; \
-		make -C $(ONL_DIR) onl-$(ONL_KERN_VER_MAJOR); \
+		make -C $(ONL_DIR) onl-$(ONL_KERN_VER_MAJOR) INBAND=n; \
+	else \
+		if [ "$(INBAND)" = n -a "$$(grep "inband" $(ONL_DIR)/onl_build.mode | cut -d= -f 2)" = y ]; then \
+			make -C $(ONL_DIR) onl-$(ONL_KERN_VER_MAJOR) INBAND=n; \
+		fi; \
 	fi;
 onl-force:
 	make -C $(ONL_DIR) $(OPENOLTDEVICE)-$(ONL_KERN_VER_MAJOR)
@@ -294,6 +302,13 @@
 	ln -sf $(LIBGRPC_PATH)/libgrpc++.so.1 $(BUILD_DIR)/libgrpc++.so.1
 	ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6 $(BUILD_DIR)/libstdc++.so.6
 	strip $(BUILD_DIR)/openolt
+	echo "inband=n" > $(ONL_DIR)/onl_build.mode
+	if [ $(INBAND) = y ]; then \
+	    echo "Building ONL+BAL+OpenoltAgent allinone image"; \
+	    make deb; \
+	    make inband-onl; \
+	fi;
+
 src/%.o: src/%.cc
 	$(CXX) $(CXXFLAGS) $(CXXFLAGSDEVICE) $(CPPFLAGS) -I./common -c $< -o $@
 
@@ -309,6 +324,40 @@
 	mv device/$(OPENOLTDEVICE)/*.deb $(BUILD_DIR)/openolt_$(OPENOLTDEVICE)-$(VERSION)-$(LABEL_VCS_REF).deb
 	make deb-cleanup
 
+inband-onl:
+	# Clean previous ONL build and build freshly
+	sudo rm -rf $(ONL_DIR)
+	mkdir -p $(ONL_DIR)
+	git clone https://github.com/opencomputeproject/OpenNetworkLinux.git $(ONL_DIR)/OpenNetworkLinux
+	cp download/Makefile.onl $(ONL_DIR)/Makefile
+	install -m 755 download/build-onl.sh $(ONL_DIR)/OpenNetworkLinux
+
+	# Check ONL commit equals to Inband patch commit
+	ONL_COMMIT_ID=$(awk \'/COMMIT_ID = /{print $0}\' $(ONL_DIR)/Makefile | awk -F \"=\" \'{print $2}\')
+	INBAND_PATCH_COMMIT_ID=$(echo cp $(TOP_DIR)/inband/patch/*.patch | cut -d- -f 2 | cut -d. -f 1)
+	if [ "$(ONL_COMMIT_ID)" = "$(INBAND_PATCH_COMMIT_ID)" ]; then \
+	    echo "ONL commit and inband patch commit matched."; \
+	    cp $(TOP_DIR)/inband/patch/*.patch $(ONL_DIR)/OpenNetworkLinux; \
+	else \
+	    echo "ONL commit and inband patch commit does not match. Exiting."; \
+	    exit 1; \
+	fi;
+
+	# Update vlan.config file with VLAN ID argument passed
+	sed -i 's/asfvolt16_vlan_id_eth2=.*/asfvolt16_vlan_id_eth2=$(VLAN_ID)/' $(TOP_DIR)/inband/config/vlan.config
+	sed -i 's/asgvolt64_vlan_id_eth1=.*/asgvolt64_vlan_id_eth1=$(VLAN_ID)/' $(TOP_DIR)/inband/config/vlan.config
+
+	# Copy Inband config files and olt startup scripts to ONL source code and build
+	cd $(TOP_DIR)  && mkdir -p $(ONL_DIR)/OpenNetworkLinux/bal_packages
+	cp $(TOP_DIR)/inband/scripts/* $(ONL_DIR)/OpenNetworkLinux/bal_packages
+	cp $(TOP_DIR)/inband/config/vlan.config $(ONL_DIR)/OpenNetworkLinux/bal_packages
+	cp $(BUILD_DIR)/openolt_$(OPENOLTDEVICE)-$(VERSION)-$(LABEL_VCS_REF).deb $(ONL_DIR)/OpenNetworkLinux/bal_packages/openolt_$(OPENOLTDEVICE).deb
+
+	# Rebuild ONL packed with already built BAL+Openolt debian package
+	make -C $(ONL_DIR) onl-$(ONL_KERN_VER_MAJOR) INBAND=y
+	echo "inband=y" > $(ONL_DIR)/onl_build.mode
+	make inband-onl-cleanup
+
 src/%.o: %.cpp
 	$(CXX) -MMD -c $< -o $@
 
@@ -329,6 +378,10 @@
 	@rm -rf device/$(OPENOLTDEVICE)/mkdebian/debian/tmp/
 	@rm -f device/$(OPENOLTDEVICE)/$(OPENOLTDEVICE)_$(BAL_VER)+edgecore-V$(DEV_VER)_amd64.changes
 
+inband-onl-cleanup:
+	@rm -f $(ONL_DIR)/OpenNetworkLinux/*.patch
+	@rm -rf $(ONL_DIR)/OpenNetworkLinux/bal_packages
+
 clean: protos-clean deb-cleanup
 	@rm -f $(OBJS) $(DEPS)
 	@rm -rf $(OPENOLT_PROTOS_DIR)/googleapis
@@ -345,4 +398,4 @@
 distclean: clean-src clean
 	@rm -rf $(BUILD_DIR)
 
-.PHONY: onl sdk bal protos prereqs-system prereqs-local sim .FORCE
+.PHONY: onl sdk bal protos prereqs-system prereqs-local sim inband-onl .FORCE