VOL-248 Management of EdgeCore OLT devices
VOL-312 Redfish server build integration
- ReadMe with instructions for Build, install and execution
- scripts for building redfish service code by downloading intelRSD code and accton pathc from google drive and apply patch file from calsoft
- remove.sh script for uninstalling redfish service
- calsoft.patch
- asfvolt16_redfish_uri for referring URI's
Change-Id: I9b6bcb1af08a427ed96ec9bc10f84bd39489786b
diff --git a/asfvolt16_redfish_service/ReadMe b/asfvolt16_redfish_service/ReadMe
new file mode 100644
index 0000000..ec970fc
--- /dev/null
+++ b/asfvolt16_redfish_service/ReadMe
@@ -0,0 +1,62 @@
+#################Steps for Building Redfish service ##################
+
+ 1. Setup ONL build environment
+ > git clone https://github.com/Lewis-Kang/OpenNetworkLinux.git -b kernel_3.7.10
+ > cd OpenNetworkLinux
+
+ 2. Copy asfvolt16_redfish_service folder to OpenNetworkLinux directory
+ > cp -a asfvolt16_redfish_service OpenNetworkLinux/asfvolt16-driver
+
+ 3. Enter into docker environment
+ > docker/tools/onlbuilder -8
+
+ 4. Install the required packages for building Redfish service package using install_dependencies.sh script.
+ > sh asfvolt16-driver/asfvolt16_redfish_service/scripts/install_dependencies.sh
+
+ 5. Execute build script
+ This will download IntelRSD and accton patch provided by Nick from the google drive and apply accton and calsoft patch and creates the binaries. For now rsd_org.tar.gz and the patch file is located in google drive. In future we may have to move this to github.
+ > sh asfvolt16-driver/asfvolt16_redfish_service/scripts/build_psme_prepare.sh
+
+ 6. Packages will be created "$ONL_TOPDIR/asfvolt16-driver/asfvolt16_redfish_service/rsd_org/asfvolt16_rf_packages" and can be copied to OLT.
+ > ls "$ONL_TOPDIR/asfvolt16-driver/asfvolt16_redfish_service/rsd_org/asfvolt16_rf_packages"
+
+
+#################Steps for installing and running Redfish service in ASFVOLT16 OLT##################
+
+0. Connect console cable , network cable to olt console port and management port.
+
+1. Instll NOS image by ONIE
+
+2. Use root/onl to login to olt ONL linux shell environment.
+
+3. Config manage interface. (Depend on your network environment)
+ > ifconfig ma1 192.168.1.99
+ > route add default gw 192.168.1.2
+
+4. use "scp" commond to upload *.deb image to OLT (Depend on your network environment,you can use your own method to upload *.deb package in ONL)
+
+5. Install *.deb package in OLT
+ > sudo dpkg -i *.deb
+ > Please press enter to pass this prompt "Please select your platform (BDC-A or BDC-R):" appear.
+ > Please make sure that libgnutls-deb0-28 package is installed.
+ ls -lah /usr/lib/x86_64-linux-gnu/libgnutls-deb0.so.28.41.7
+ > update-rc.d psme defaults " To start psme at boot time"
+ > reboot
+
+6. startup psme service manually
+ > service psme start
+
+7. Check running daemon
+ > ps auxw
+
+ You can see following application is running.
+
+ root 15978 1.6 0.1 1005748 20736 ? Sl 00:05 0:13 /usr/local/bin/psme-rest-server /etc/rmm/psme.conf
+ root 16036 0.3 0.0 1030696 13280 ? Sl 00:05 0:03 /usr/local/bin/psme-chassis /etc/rmm/platform_info.conf
+
+8. Please refer to "asfvolt16_redfish_uri.doc" document and use curl command for testing the Redfish service
+ Eg: curl -X GET https://192.168.122.5:8888/redfish/v1/Systems/1 -k
+
+9. Uninstall *.deb before you install new *.deb
+ > sh remove.sh
+ It will stop psme service and remove *.deb
diff --git a/asfvolt16_redfish_service/asfvolt16_redfish_uri.doc b/asfvolt16_redfish_service/asfvolt16_redfish_uri.doc
new file mode 100644
index 0000000..15d34d4
--- /dev/null
+++ b/asfvolt16_redfish_service/asfvolt16_redfish_uri.doc
Binary files differ
diff --git a/asfvolt16_redfish_service/calsoft.patch b/asfvolt16_redfish_service/calsoft.patch
new file mode 100644
index 0000000..4641634
--- /dev/null
+++ b/asfvolt16_redfish_service/calsoft.patch
@@ -0,0 +1,1934 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+diff -ruN rsd_org/Documents/readme.md rsd_org_calsoft/Documents/readme.md
+--- rsd_org/Documents/readme.md 2017-12-15 06:54:00.000000000 +0530
++++ rsd_org_calsoft/Documents/readme.md 1970-01-01 05:30:00.000000000 +0530
+@@ -1 +0,0 @@
+-Documents related to implementation of Intel® Rack Scale Design Reference Software
+Binary files rsd_org/Documents/SUSE_Caas_Implementation_Guide.pdf and rsd_org_calsoft/Documents/SUSE_Caas_Implementation_Guide.pdf differ
+diff -ruN rsd_org/.git/config rsd_org_calsoft/.git/config
+--- rsd_org/.git/config 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/config 1970-01-01 05:30:00.000000000 +0530
+@@ -1,11 +0,0 @@
+-[core]
+- repositoryformatversion = 0
+- filemode = true
+- bare = false
+- logallrefupdates = true
+-[remote "origin"]
+- url = http://code.accton.com.tw/git/rsd.git
+- fetch = +refs/heads/*:refs/remotes/origin/*
+-[branch "RSA-SW-Accton-2.1.3"]
+- remote = origin
+- merge = refs/heads/RSA-SW-Accton-2.1.3
+diff -ruN rsd_org/.git/description rsd_org_calsoft/.git/description
+--- rsd_org/.git/description 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/description 1970-01-01 05:30:00.000000000 +0530
+@@ -1 +0,0 @@
+-Unnamed repository; edit this file 'description' to name the repository.
+diff -ruN rsd_org/.git/HEAD rsd_org_calsoft/.git/HEAD
+--- rsd_org/.git/HEAD 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/HEAD 1970-01-01 05:30:00.000000000 +0530
+@@ -1 +0,0 @@
+-ref: refs/heads/RSA-SW-Accton-2.1.3
+diff -ruN rsd_org/.git/hooks/applypatch-msg.sample rsd_org_calsoft/.git/hooks/applypatch-msg.sample
+--- rsd_org/.git/hooks/applypatch-msg.sample 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/hooks/applypatch-msg.sample 1970-01-01 05:30:00.000000000 +0530
+@@ -1,15 +0,0 @@
+-#!/bin/sh
+-#
+-# An example hook script to check the commit log message taken by
+-# applypatch from an e-mail message.
+-#
+-# The hook should exit with non-zero status after issuing an
+-# appropriate message if it wants to stop the commit. The hook is
+-# allowed to edit the commit message file.
+-#
+-# To enable this hook, rename this file to "applypatch-msg".
+-
+-. git-sh-setup
+-test -x "$GIT_DIR/hooks/commit-msg" &&
+- exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+-:
+diff -ruN rsd_org/.git/hooks/commit-msg.sample rsd_org_calsoft/.git/hooks/commit-msg.sample
+--- rsd_org/.git/hooks/commit-msg.sample 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/hooks/commit-msg.sample 1970-01-01 05:30:00.000000000 +0530
+@@ -1,24 +0,0 @@
+-#!/bin/sh
+-#
+-# An example hook script to check the commit log message.
+-# Called by "git commit" with one argument, the name of the file
+-# that has the commit message. The hook should exit with non-zero
+-# status after issuing an appropriate message if it wants to stop the
+-# commit. The hook is allowed to edit the commit message file.
+-#
+-# To enable this hook, rename this file to "commit-msg".
+-
+-# Uncomment the below to add a Signed-off-by line to the message.
+-# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+-# hook is more suited to it.
+-#
+-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+-
+-# This example catches duplicate Signed-off-by lines.
+-
+-test "" = "$(grep '^Signed-off-by: ' "$1" |
+- sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
+- echo >&2 Duplicate Signed-off-by lines.
+- exit 1
+-}
+diff -ruN rsd_org/.git/hooks/post-update.sample rsd_org_calsoft/.git/hooks/post-update.sample
+--- rsd_org/.git/hooks/post-update.sample 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/hooks/post-update.sample 1970-01-01 05:30:00.000000000 +0530
+@@ -1,8 +0,0 @@
+-#!/bin/sh
+-#
+-# An example hook script to prepare a packed repository for use over
+-# dumb transports.
+-#
+-# To enable this hook, rename this file to "post-update".
+-
+-exec git update-server-info
+diff -ruN rsd_org/.git/hooks/pre-applypatch.sample rsd_org_calsoft/.git/hooks/pre-applypatch.sample
+--- rsd_org/.git/hooks/pre-applypatch.sample 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/hooks/pre-applypatch.sample 1970-01-01 05:30:00.000000000 +0530
+@@ -1,14 +0,0 @@
+-#!/bin/sh
+-#
+-# An example hook script to verify what is about to be committed
+-# by applypatch from an e-mail message.
+-#
+-# The hook should exit with non-zero status after issuing an
+-# appropriate message if it wants to stop the commit.
+-#
+-# To enable this hook, rename this file to "pre-applypatch".
+-
+-. git-sh-setup
+-test -x "$GIT_DIR/hooks/pre-commit" &&
+- exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+-:
+diff -ruN rsd_org/.git/hooks/pre-commit.sample rsd_org_calsoft/.git/hooks/pre-commit.sample
+--- rsd_org/.git/hooks/pre-commit.sample 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/hooks/pre-commit.sample 1970-01-01 05:30:00.000000000 +0530
+@@ -1,49 +0,0 @@
+-#!/bin/sh
+-#
+-# An example hook script to verify what is about to be committed.
+-# Called by "git commit" with no arguments. The hook should
+-# exit with non-zero status after issuing an appropriate message if
+-# it wants to stop the commit.
+-#
+-# To enable this hook, rename this file to "pre-commit".
+-
+-if git rev-parse --verify HEAD >/dev/null 2>&1
+-then
+- against=HEAD
+-else
+- # Initial commit: diff against an empty tree object
+- against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+-fi
+-
+-# If you want to allow non-ASCII filenames set this variable to true.
+-allownonascii=$(git config --bool hooks.allownonascii)
+-
+-# Redirect output to stderr.
+-exec 1>&2
+-
+-# Cross platform projects tend to avoid non-ASCII filenames; prevent
+-# them from being added to the repository. We exploit the fact that the
+-# printable range starts at the space character and ends with tilde.
+-if [ "$allownonascii" != "true" ] &&
+- # Note that the use of brackets around a tr range is ok here, (it's
+- # even required, for portability to Solaris 10's /usr/bin/tr), since
+- # the square bracket bytes happen to fall in the designated range.
+- test $(git diff --cached --name-only --diff-filter=A -z $against |
+- LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+-then
+- cat <<\EOF
+-Error: Attempt to add a non-ASCII file name.
+-
+-This can cause problems if you want to work with people on other platforms.
+-
+-To be portable it is advisable to rename the file.
+-
+-If you know what you are doing you can disable this check using:
+-
+- git config hooks.allownonascii true
+-EOF
+- exit 1
+-fi
+-
+-# If there are whitespace errors, print the offending file names and fail.
+-exec git diff-index --check --cached $against --
+diff -ruN rsd_org/.git/hooks/prepare-commit-msg.sample rsd_org_calsoft/.git/hooks/prepare-commit-msg.sample
+--- rsd_org/.git/hooks/prepare-commit-msg.sample 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/hooks/prepare-commit-msg.sample 1970-01-01 05:30:00.000000000 +0530
+@@ -1,36 +0,0 @@
+-#!/bin/sh
+-#
+-# An example hook script to prepare the commit log message.
+-# Called by "git commit" with the name of the file that has the
+-# commit message, followed by the description of the commit
+-# message's source. The hook's purpose is to edit the commit
+-# message file. If the hook fails with a non-zero status,
+-# the commit is aborted.
+-#
+-# To enable this hook, rename this file to "prepare-commit-msg".
+-
+-# This hook includes three examples. The first comments out the
+-# "Conflicts:" part of a merge commit.
+-#
+-# The second includes the output of "git diff --name-status -r"
+-# into the message, just before the "git status" output. It is
+-# commented because it doesn't cope with --amend or with squashed
+-# commits.
+-#
+-# The third example adds a Signed-off-by line to the message, that can
+-# still be edited. This is rarely a good idea.
+-
+-case "$2,$3" in
+- merge,)
+- /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+-
+-# ,|template,)
+-# /usr/bin/perl -i.bak -pe '
+-# print "\n" . `git diff --cached --name-status -r`
+-# if /^#/ && $first++ == 0' "$1" ;;
+-
+- *) ;;
+-esac
+-
+-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+diff -ruN rsd_org/.git/hooks/pre-push.sample rsd_org_calsoft/.git/hooks/pre-push.sample
+--- rsd_org/.git/hooks/pre-push.sample 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/hooks/pre-push.sample 1970-01-01 05:30:00.000000000 +0530
+@@ -1,54 +0,0 @@
+-#!/bin/sh
+-
+-# An example hook script to verify what is about to be pushed. Called by "git
+-# push" after it has checked the remote status, but before anything has been
+-# pushed. If this script exits with a non-zero status nothing will be pushed.
+-#
+-# This hook is called with the following parameters:
+-#
+-# $1 -- Name of the remote to which the push is being done
+-# $2 -- URL to which the push is being done
+-#
+-# If pushing without using a named remote those arguments will be equal.
+-#
+-# Information about the commits which are being pushed is supplied as lines to
+-# the standard input in the form:
+-#
+-# <local ref> <local sha1> <remote ref> <remote sha1>
+-#
+-# This sample shows how to prevent push of commits where the log message starts
+-# with "WIP" (work in progress).
+-
+-remote="$1"
+-url="$2"
+-
+-z40=0000000000000000000000000000000000000000
+-
+-IFS=' '
+-while read local_ref local_sha remote_ref remote_sha
+-do
+- if [ "$local_sha" = $z40 ]
+- then
+- # Handle delete
+- :
+- else
+- if [ "$remote_sha" = $z40 ]
+- then
+- # New branch, examine all commits
+- range="$local_sha"
+- else
+- # Update to existing branch, examine new commits
+- range="$remote_sha..$local_sha"
+- fi
+-
+- # Check for WIP commit
+- commit=`git rev-list -n 1 --grep '^WIP' "$range"`
+- if [ -n "$commit" ]
+- then
+- echo "Found WIP commit in $local_ref, not pushing"
+- exit 1
+- fi
+- fi
+-done
+-
+-exit 0
+diff -ruN rsd_org/.git/hooks/pre-rebase.sample rsd_org_calsoft/.git/hooks/pre-rebase.sample
+--- rsd_org/.git/hooks/pre-rebase.sample 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/hooks/pre-rebase.sample 1970-01-01 05:30:00.000000000 +0530
+@@ -1,169 +0,0 @@
+-#!/bin/sh
+-#
+-# Copyright (c) 2006, 2008 Junio C Hamano
+-#
+-# The "pre-rebase" hook is run just before "git rebase" starts doing
+-# its job, and can prevent the command from running by exiting with
+-# non-zero status.
+-#
+-# The hook is called with the following parameters:
+-#
+-# $1 -- the upstream the series was forked from.
+-# $2 -- the branch being rebased (or empty when rebasing the current branch).
+-#
+-# This sample shows how to prevent topic branches that are already
+-# merged to 'next' branch from getting rebased, because allowing it
+-# would result in rebasing already published history.
+-
+-publish=next
+-basebranch="$1"
+-if test "$#" = 2
+-then
+- topic="refs/heads/$2"
+-else
+- topic=`git symbolic-ref HEAD` ||
+- exit 0 ;# we do not interrupt rebasing detached HEAD
+-fi
+-
+-case "$topic" in
+-refs/heads/??/*)
+- ;;
+-*)
+- exit 0 ;# we do not interrupt others.
+- ;;
+-esac
+-
+-# Now we are dealing with a topic branch being rebased
+-# on top of master. Is it OK to rebase it?
+-
+-# Does the topic really exist?
+-git show-ref -q "$topic" || {
+- echo >&2 "No such branch $topic"
+- exit 1
+-}
+-
+-# Is topic fully merged to master?
+-not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+-if test -z "$not_in_master"
+-then
+- echo >&2 "$topic is fully merged to master; better remove it."
+- exit 1 ;# we could allow it, but there is no point.
+-fi
+-
+-# Is topic ever merged to next? If so you should not be rebasing it.
+-only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+-only_next_2=`git rev-list ^master ${publish} | sort`
+-if test "$only_next_1" = "$only_next_2"
+-then
+- not_in_topic=`git rev-list "^$topic" master`
+- if test -z "$not_in_topic"
+- then
+- echo >&2 "$topic is already up-to-date with master"
+- exit 1 ;# we could allow it, but there is no point.
+- else
+- exit 0
+- fi
+-else
+- not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+- /usr/bin/perl -e '
+- my $topic = $ARGV[0];
+- my $msg = "* $topic has commits already merged to public branch:\n";
+- my (%not_in_next) = map {
+- /^([0-9a-f]+) /;
+- ($1 => 1);
+- } split(/\n/, $ARGV[1]);
+- for my $elem (map {
+- /^([0-9a-f]+) (.*)$/;
+- [$1 => $2];
+- } split(/\n/, $ARGV[2])) {
+- if (!exists $not_in_next{$elem->[0]}) {
+- if ($msg) {
+- print STDERR $msg;
+- undef $msg;
+- }
+- print STDERR " $elem->[1]\n";
+- }
+- }
+- ' "$topic" "$not_in_next" "$not_in_master"
+- exit 1
+-fi
+-
+-<<\DOC_END
+-
+-This sample hook safeguards topic branches that have been
+-published from being rewound.
+-
+-The workflow assumed here is:
+-
+- * Once a topic branch forks from "master", "master" is never
+- merged into it again (either directly or indirectly).
+-
+- * Once a topic branch is fully cooked and merged into "master",
+- it is deleted. If you need to build on top of it to correct
+- earlier mistakes, a new topic branch is created by forking at
+- the tip of the "master". This is not strictly necessary, but
+- it makes it easier to keep your history simple.
+-
+- * Whenever you need to test or publish your changes to topic
+- branches, merge them into "next" branch.
+-
+-The script, being an example, hardcodes the publish branch name
+-to be "next", but it is trivial to make it configurable via
+-$GIT_DIR/config mechanism.
+-
+-With this workflow, you would want to know:
+-
+-(1) ... if a topic branch has ever been merged to "next". Young
+- topic branches can have stupid mistakes you would rather
+- clean up before publishing, and things that have not been
+- merged into other branches can be easily rebased without
+- affecting other people. But once it is published, you would
+- not want to rewind it.
+-
+-(2) ... if a topic branch has been fully merged to "master".
+- Then you can delete it. More importantly, you should not
+- build on top of it -- other people may already want to
+- change things related to the topic as patches against your
+- "master", so if you need further changes, it is better to
+- fork the topic (perhaps with the same name) afresh from the
+- tip of "master".
+-
+-Let's look at this example:
+-
+- o---o---o---o---o---o---o---o---o---o "next"
+- / / / /
+- / a---a---b A / /
+- / / / /
+- / / c---c---c---c B /
+- / / / \ /
+- / / / b---b C \ /
+- / / / / \ /
+- ---o---o---o---o---o---o---o---o---o---o---o "master"
+-
+-
+-A, B and C are topic branches.
+-
+- * A has one fix since it was merged up to "next".
+-
+- * B has finished. It has been fully merged up to "master" and "next",
+- and is ready to be deleted.
+-
+- * C has not merged to "next" at all.
+-
+-We would want to allow C to be rebased, refuse A, and encourage
+-B to be deleted.
+-
+-To compute (1):
+-
+- git rev-list ^master ^topic next
+- git rev-list ^master next
+-
+- if these match, topic has not merged in next at all.
+-
+-To compute (2):
+-
+- git rev-list master..topic
+-
+- if this is empty, it is fully merged to "master".
+-
+-DOC_END
+diff -ruN rsd_org/.git/hooks/update.sample rsd_org_calsoft/.git/hooks/update.sample
+--- rsd_org/.git/hooks/update.sample 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/hooks/update.sample 1970-01-01 05:30:00.000000000 +0530
+@@ -1,128 +0,0 @@
+-#!/bin/sh
+-#
+-# An example hook script to blocks unannotated tags from entering.
+-# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+-#
+-# To enable this hook, rename this file to "update".
+-#
+-# Config
+-# ------
+-# hooks.allowunannotated
+-# This boolean sets whether unannotated tags will be allowed into the
+-# repository. By default they won't be.
+-# hooks.allowdeletetag
+-# This boolean sets whether deleting tags will be allowed in the
+-# repository. By default they won't be.
+-# hooks.allowmodifytag
+-# This boolean sets whether a tag may be modified after creation. By default
+-# it won't be.
+-# hooks.allowdeletebranch
+-# This boolean sets whether deleting branches will be allowed in the
+-# repository. By default they won't be.
+-# hooks.denycreatebranch
+-# This boolean sets whether remotely creating branches will be denied
+-# in the repository. By default this is allowed.
+-#
+-
+-# --- Command line
+-refname="$1"
+-oldrev="$2"
+-newrev="$3"
+-
+-# --- Safety check
+-if [ -z "$GIT_DIR" ]; then
+- echo "Don't run this script from the command line." >&2
+- echo " (if you want, you could supply GIT_DIR then run" >&2
+- echo " $0 <ref> <oldrev> <newrev>)" >&2
+- exit 1
+-fi
+-
+-if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+- echo "usage: $0 <ref> <oldrev> <newrev>" >&2
+- exit 1
+-fi
+-
+-# --- Config
+-allowunannotated=$(git config --bool hooks.allowunannotated)
+-allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+-denycreatebranch=$(git config --bool hooks.denycreatebranch)
+-allowdeletetag=$(git config --bool hooks.allowdeletetag)
+-allowmodifytag=$(git config --bool hooks.allowmodifytag)
+-
+-# check for no description
+-projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+-case "$projectdesc" in
+-"Unnamed repository"* | "")
+- echo "*** Project description file hasn't been set" >&2
+- exit 1
+- ;;
+-esac
+-
+-# --- Check types
+-# if $newrev is 0000...0000, it's a commit to delete a ref.
+-zero="0000000000000000000000000000000000000000"
+-if [ "$newrev" = "$zero" ]; then
+- newrev_type=delete
+-else
+- newrev_type=$(git cat-file -t $newrev)
+-fi
+-
+-case "$refname","$newrev_type" in
+- refs/tags/*,commit)
+- # un-annotated tag
+- short_refname=${refname##refs/tags/}
+- if [ "$allowunannotated" != "true" ]; then
+- echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+- echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+- exit 1
+- fi
+- ;;
+- refs/tags/*,delete)
+- # delete tag
+- if [ "$allowdeletetag" != "true" ]; then
+- echo "*** Deleting a tag is not allowed in this repository" >&2
+- exit 1
+- fi
+- ;;
+- refs/tags/*,tag)
+- # annotated tag
+- if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+- then
+- echo "*** Tag '$refname' already exists." >&2
+- echo "*** Modifying a tag is not allowed in this repository." >&2
+- exit 1
+- fi
+- ;;
+- refs/heads/*,commit)
+- # branch
+- if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+- echo "*** Creating a branch is not allowed in this repository" >&2
+- exit 1
+- fi
+- ;;
+- refs/heads/*,delete)
+- # delete branch
+- if [ "$allowdeletebranch" != "true" ]; then
+- echo "*** Deleting a branch is not allowed in this repository" >&2
+- exit 1
+- fi
+- ;;
+- refs/remotes/*,commit)
+- # tracking branch
+- ;;
+- refs/remotes/*,delete)
+- # delete tracking branch
+- if [ "$allowdeletebranch" != "true" ]; then
+- echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+- exit 1
+- fi
+- ;;
+- *)
+- # Anything else (is there anything else?)
+- echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+- exit 1
+- ;;
+-esac
+-
+-# --- Finished
+-exit 0
+diff -ruN rsd_org/.git/info/exclude rsd_org_calsoft/.git/info/exclude
+--- rsd_org/.git/info/exclude 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/info/exclude 1970-01-01 05:30:00.000000000 +0530
+@@ -1,6 +0,0 @@
+-# git ls-files --others --exclude-from=.git/info/exclude
+-# Lines that start with '#' are comments.
+-# For a project mostly in C, the following would be a good set of
+-# exclude patterns (uncomment them if you want to use them):
+-# *.[oa]
+-# *~
+diff -ruN rsd_org/.git/logs/HEAD rsd_org_calsoft/.git/logs/HEAD
+--- rsd_org/.git/logs/HEAD 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/logs/HEAD 1970-01-01 05:30:00.000000000 +0530
+@@ -1 +0,0 @@
+-0000000000000000000000000000000000000000 80947e58159a4f1d864c544ca4ed2d15307208f2 nick_huang <nick_huang@accton.com> 1502862611 +0000 clone: from http://code.accton.com.tw/git/rsd.git
+diff -ruN rsd_org/.git/logs/refs/heads/RSA-SW-Accton-2.1.3 rsd_org_calsoft/.git/logs/refs/heads/RSA-SW-Accton-2.1.3
+--- rsd_org/.git/logs/refs/heads/RSA-SW-Accton-2.1.3 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/logs/refs/heads/RSA-SW-Accton-2.1.3 1970-01-01 05:30:00.000000000 +0530
+@@ -1 +0,0 @@
+-0000000000000000000000000000000000000000 80947e58159a4f1d864c544ca4ed2d15307208f2 nick_huang <nick_huang@accton.com> 1502862611 +0000 clone: from http://code.accton.com.tw/git/rsd.git
+diff -ruN rsd_org/.git/logs/refs/remotes/origin/HEAD rsd_org_calsoft/.git/logs/refs/remotes/origin/HEAD
+--- rsd_org/.git/logs/refs/remotes/origin/HEAD 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/logs/refs/remotes/origin/HEAD 1970-01-01 05:30:00.000000000 +0530
+@@ -1 +0,0 @@
+-0000000000000000000000000000000000000000 0f0f9cb796b4acb506c84d7aa40c4404b7ade7cd nick_huang <nick_huang@accton.com> 1502862611 +0000 clone: from http://code.accton.com.tw/git/rsd.git
+diff -ruN rsd_org/.git/packed-refs rsd_org_calsoft/.git/packed-refs
+--- rsd_org/.git/packed-refs 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/packed-refs 1970-01-01 05:30:00.000000000 +0530
+@@ -1,4 +0,0 @@
+-# pack-refs with: peeled fully-peeled
+-f4eaaa9ebc96c08d2771f1a088e82a7b81762142 refs/remotes/origin/RSA-SW-Accton
+-80947e58159a4f1d864c544ca4ed2d15307208f2 refs/remotes/origin/RSA-SW-Accton-2.1.3
+-0f0f9cb796b4acb506c84d7aa40c4404b7ade7cd refs/remotes/origin/master
+diff -ruN rsd_org/.git/refs/heads/RSA-SW-Accton-2.1.3 rsd_org_calsoft/.git/refs/heads/RSA-SW-Accton-2.1.3
+--- rsd_org/.git/refs/heads/RSA-SW-Accton-2.1.3 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/refs/heads/RSA-SW-Accton-2.1.3 1970-01-01 05:30:00.000000000 +0530
+@@ -1 +0,0 @@
+-80947e58159a4f1d864c544ca4ed2d15307208f2
+diff -ruN rsd_org/.git/refs/remotes/origin/HEAD rsd_org_calsoft/.git/refs/remotes/origin/HEAD
+--- rsd_org/.git/refs/remotes/origin/HEAD 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/.git/refs/remotes/origin/HEAD 1970-01-01 05:30:00.000000000 +0530
+@@ -1 +0,0 @@
+-ref: refs/remotes/origin/master
+diff -ruN rsd_org/PSME/agent/chassis/src/ipmb/watcher/thermal_sensor_task.cpp rsd_org_calsoft/PSME/agent/chassis/src/ipmb/watcher/thermal_sensor_task.cpp
+--- rsd_org/PSME/agent/chassis/src/ipmb/watcher/thermal_sensor_task.cpp 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/PSME/agent/chassis/src/ipmb/watcher/thermal_sensor_task.cpp 2017-12-15 17:52:20.975988851 +0530
+@@ -200,6 +200,11 @@
+ uint32_t i = 0;
+ char resultA[128];
+ int tmp1[8] = {0};
++ /* ACL Added Begin */
++ uint32_t j = 0, k = 0;
++ int fan[8] = {0};
++ int temp[8] = {0};
++ /* ACL Added End */
+
+ /*Get FAN info.*/
+ for (const auto& key: manager_keys) {
+@@ -227,7 +232,16 @@
+ i = 0;
+ memset(resultA, 0x0, sizeof(resultA));
+ exec_shell("psme.sh get psu_power_out", resultA);
+- sscanf(resultA, " %d %d" , &tmp1[0] , &tmp1[1]);
++ sscanf(resultA, " %d %d" , &tmp1[0] , &tmp1[1]);
++ /* ACL Added Begin */
++ memset(resultA, 0x0, sizeof(resultA));
++ exec_shell("psme.sh get psu_temp_out", resultA);
++ sscanf(resultA, " %d %d" , &temp[0] , &temp[1]);
++ memset(resultA, 0x0, sizeof(resultA));
++ exec_shell("psme.sh get psu_fan_out", resultA);
++ sscanf(resultA, " %d %d" , &fan[0] , &fan[1]);
++ /* ACL Added End */
++
+
+ auto &psu_manager = agent_framework::module::ChassisComponents::get_instance()->get_psu_manager();
+
+@@ -240,6 +254,10 @@
+ if (psu_->get_psu_id() == i+1)
+ {
+ psu_->set_power_output(tmp1[i++]);
++ /* ACL Added Begin */
++ psu_->set_temp_output(temp[j++]);
++ psu_->set_fan_output(fan[k++]);
++ /* ACL Added Begin */
+ }
+ }
+
+diff -ruN rsd_org/PSME/agent/chassis/src/loader/chassis_loader.cpp rsd_org_calsoft/PSME/agent/chassis/src/loader/chassis_loader.cpp
+--- rsd_org/PSME/agent/chassis/src/loader/chassis_loader.cpp 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/PSME/agent/chassis/src/loader/chassis_loader.cpp 2017-12-15 17:52:26.894946981 +0530
+@@ -591,6 +591,17 @@
+ fru_info.set_model_number(json["model_number"].as_string());
+ fru_info.set_part_number(json["model_number"].as_string());
+ fru_info.set_serial_number(json["serial_number"].as_string());
++ /* ACL Added Begin */
++ fru_info.set_product_name(json["product_name"].as_string());
++ fru_info.set_mac_address(json["mac_address"].as_string());
++ fru_info.set_mac_range(json["mac_range"].as_string());
++ fru_info.set_manufacture_date(json["manufacture_date"].as_string());
++ fru_info.set_platform_name(json["platform_name"].as_string());
++ fru_info.set_label_revision(json["label_revision"].as_string());
++ fru_info.set_country_code(json["country_code"].as_string());
++ fru_info.set_diag_version(json["diag_version"].as_string());
++ fru_info.set_onie_version(json["onie_version"].as_string());
++ /* ACL Added End */
+ system.set_fru_info(std::move(fru_info));
+ CommonComponents::get_instance()->get_system_manager().add_entry(system);
+ }
+diff -ruN rsd_org/PSME/agent/network/acc_sw/C_PINFO rsd_org_calsoft/PSME/agent/network/acc_sw/C_PINFO
+--- rsd_org/PSME/agent/network/acc_sw/C_PINFO 2017-12-19 13:19:16.488042958 +0530
++++ rsd_org_calsoft/PSME/agent/network/acc_sw/C_PINFO 2017-12-15 17:52:40.989991292 +0530
+@@ -28,6 +28,17 @@
+ else
+ MANUFACTURER=`${ONLPDUMP} | grep -m 1 "Manufacturer" | awk -F':' '{print $2}'`
+ SERIAL_NUMBER=`${ONLPDUMP} | grep -m 1 "Serial Number" | awk -F':' '{print $2}'`
++
++ PRODUCT_NAME=`${ONLPDUMP} | grep -m 1 "Product Name" | awk '{print $3}'`
++ MAC_ADDRESS=`${ONLPDUMP} | grep 'MAC:' | awk '{print $2}'`
++ MAC_RANGE=`${ONLPDUMP} | grep -m 1 'MAC Range' | awk '{print $3}'`
++ MANUFACTURE_DATE=`${ONLPDUMP} | grep 'Manufacture Date:' | awk '{print $3}'`
++ PLATFORM_NAME=`${ONLPDUMP} | grep -m 1 'Platform Name:' | awk {'print $3'}`
++ LABEL_REVISION=`${ONLPDUMP} | grep -m 1 'Label Revision:' | awk {'print $3'}`
++ COUNTRY_CODE=`${ONLPDUMP} | grep -m 1 'Country Code:' | awk {'print $3'}`
++ DIAG_VERSION=`${ONLPDUMP} | grep -m 1 'Diag Version:' | awk {'print $3'}`
++ ONIE_VERSION=`${ONLPDUMP} | grep -m 1 'ONIE Version:' | awk {'print $3'}`
++
+ ASSET_TAG_C=`cat "${ASSET_TAG}"`
+ PLATFORM="BDCR"
+ MODULE_NUMBER=`${ONLPDUMP} | grep -m 1 "Part Number" | awk -F':' '{print $2}'`
+@@ -56,7 +67,16 @@
+ \""asset_tag"\" : \""${ASSET_TAG_C}"\",
+ \""manufacturer"\" : \""${MANUFACTURER}"\",
+ \""model_number"\" : \""${MODULE_NUMBER}"\",
+- \""serial_number"\" : \""${SERIAL_NUMBER}"\"
++ \""serial_number"\" : \""${SERIAL_NUMBER}"\",
++ \""product_name"\" : \""${PRODUCT_NAME}"\",
++ \""mac_address"\" : \""${MAC_ADDRESS}"\",
++ \""mac_range"\" : \""${MAC_RANGE}"\",
++ \""platform_name"\" : \""${PLATFORM_NAME}"\",
++ \""manufacture_date"\" : \""${MANUFACTURE_DATE}"\",
++ \""country_code"\" : \""${COUNTRY_CODE}"\",
++ \""label_revision"\" : \""${LABEL_REVISION}"\",
++ \""diag_version"\" : \""${DIAG_VERSION}"\",
++ \""onie_version"\" : \""${ONIE_VERSION}"\"
+ }
+ ,
+ \"onlp\" :
+diff -ruN rsd_org/PSME/agent/network/acc_sw/HW_NODE_ASXVOLT16 rsd_org_calsoft/PSME/agent/network/acc_sw/HW_NODE_ASXVOLT16
+--- rsd_org/PSME/agent/network/acc_sw/HW_NODE_ASXVOLT16 2017-12-19 13:19:16.492042958 +0530
++++ rsd_org_calsoft/PSME/agent/network/acc_sw/HW_NODE_ASXVOLT16 2017-12-15 17:52:47.145067428 +0530
+@@ -14,6 +14,8 @@
+ eval CURRENT_THERMAL_NODE5_PATH="/sys/bus/i2c/devices/10-004e/hwmon/hwmon5/device/temp1_input"
+ eval CURRENT_THERMAL_NODE6_PATH="/sys/bus/i2c/devices/18-005b/psu_temp1_input"
+ eval CURRENT_THERMAL_NODE7_PATH="/sys/bus/i2c/devices/17-0058/psu_temp1_input"
++ eval CURRENT_PSU1_TEMP_NODE_PATH="/sys/bus/i2c/devices/18-005b/psu_temp1_input"
++ eval CURRENT_PSU2_TEMP_NODE_PATH="/sys/bus/i2c/devices/17-0058/psu_temp1_input"
+
+ CURRENT_THERMAL_NUM="7"
+ CURRENT_PORT_NUM="20"
+diff -ruN rsd_org/PSME/agent/network/acc_sw/HW_NODE_VM rsd_org_calsoft/PSME/agent/network/acc_sw/HW_NODE_VM
+--- rsd_org/PSME/agent/network/acc_sw/HW_NODE_VM 2017-12-19 13:19:16.492042958 +0530
++++ rsd_org_calsoft/PSME/agent/network/acc_sw/HW_NODE_VM 2017-12-15 17:52:55.509247611 +0530
+@@ -15,5 +15,7 @@
+ eval CURRENT_THERMAL_NODE5_PATH="/usr/local/bin/hwmon5/temp1_input"
+ eval CURRENT_THERMAL_NODE6_PATH="/usr/local/bin/hwmon6/temp1_input"
+ eval CURRENT_THERMAL_NODE7_PATH="/usr/local/bin/hwmon7/temp1_input"
++ eval CURRENT_PSU1_TEMP_NODE_PATH="/usr/local/bin/hwmon6/temp1_input"
++ eval CURRENT_PSU2_TEMP_NODE_PATH="/usr/local/bin/hwmon7/temp1_input"
+
+ CURRENT_THERMAL_NUM="7"
+diff -ruN rsd_org/PSME/agent/network/acc_sw/psme.sh rsd_org_calsoft/PSME/agent/network/acc_sw/psme.sh
+--- rsd_org/PSME/agent/network/acc_sw/psme.sh 2017-12-19 13:19:16.492042958 +0530
++++ rsd_org_calsoft/PSME/agent/network/acc_sw/psme.sh 2017-12-19 13:08:45.948051405 +0530
+@@ -8,10 +8,14 @@
+ echo "psme.sh get fan_rear_speed_rpm : get current fan rear speed "
+ echo "psme.sh get thermal_sensor : get current thermal sensor "
+ echo "psme.sh get thermal_sensor_num : get current thermal sensor number "
+- echo "psme.sh get psu_power_out : get currnet psu power out "
++ echo "psme.sh get psu_power_out : get current psu power out "
++ echo "psme.sh get psu_fan_out : get current psu fan out "
++ echo "psme.sh get psu_temp_out : get current psu temp out "
+ echo "psme.sh get max_port_num : get current max port num "
+ echo "psme.sh get sfp_presence : get currnet sfp presence status "
+ echo "psme.sh get sfp_port_status PORT : get current PORT status "
++ echo "psme.sh get sfp_bias_current PORT : get current bias PORT "
++ echo "psme.sh get sfp_path PORT : get sfp port path "
+ echo "psme.sh set force_off : set device force off "
+ echo "psme.sh set shutdown : set device shutdown gracefully "
+ echo "psme.sh set force_restart : set device force restart "
+@@ -146,6 +150,48 @@
+ echo "${pout1} ${pout2}"
+ }
+
++#ACL Added for PSU fan and temp
++get_psu_temp_out()
++{
++ if [ -f "${CURRENT_PSU1_TEMP_NODE_PATH}" ];then
++ local tout1=`cat ${CURRENT_PSU1_TEMP_NODE_PATH}`
++ if [ "${tout1}" = "" ];then
++ tout1="0"
++ fi
++ else
++ local tout1=-1
++ fi
++
++ if [ -f "${CURRENT_PSU2_TEMP_NODE_PATH}" ];then
++ local tout2=`cat ${CURRENT_PSU2_TEMP_NODE_PATH}`
++ if [ "${tout2}" = "" ];then
++ tout2="0"
++ fi
++ else
++ local tout2=-1
++ fi
++ echo "${tout1} ${tout2}"
++}
++
++get_psu_fan_out()
++{
++ local status1=`cat ${CURRENT_PSU1_FAN_NODE_PATH}/psu_fan1_speed_rpm`
++ if [ "$status1" = "" ] || [ "$status1" = "0" ] ; then
++ f_status="${f_status} -1 "
++ else
++ f_status="${f_status} ${status1} "
++ fi
++
++ local status2=`cat ${CURRENT_PSU2_FAN_NODE_PATH}/psu_fan1_speed_rpm`
++ if [ "$status2" = "" ] || [ "$status2" = "0" ] ; then
++ f_status="${f_status} -1 "
++ else
++ f_status="${f_status} ${status2} "
++ fi
++
++ echo "${f_status}"
++}
++
+ get_max_fan_num()
+ {
+ #if there doesn't have the 'fan1_present' file , it will receive double fan number.
+@@ -435,6 +481,108 @@
+ echo "$fault_value"
+ }
+
++get_sfp_path ()
++{
++ echo "$(get_sfp_port_path "${1}")"
++}
++
++check_bias_current()
++{
++ #check_bias_current bias_ct bias_ha bias_la bias_hw bias_lw
++ bias_ct=$1
++ bias_ha=$2
++ bias_la=$3
++ bias_hw=$4
++ bias_lw=$5
++ res=0
++
++ if [ $((16#${bias_ct})) -ge $((16#${bias_ha})) ] || [ $((16#${bias_ct})) -le $((16#${bias_la})) ]; then
++ res=$((1 << 0 | 1 << 1))
++ echo $res
++ elif [[ $((16#$bias_ct)) -ge $((16#$bias_hw)) ]] && [[ $((16#$bias_ct)) -lt $((16#$bias_ha)) ]]; then
++ res=$(($res | 1 << 0))
++ echo $res
++ elif [[ $((16#$bias_ct)) -le $((16#$bias_lw)) ]] && [[ $((16#$bias_ct)) -gt $((16#$bias_la)) ]]; then
++ res=$(($res | 1 << 0))
++ echo $res
++ else
++ res=0
++ echo $res
++ fi
++}
++
++get_bias_current()
++{
++ status=1
++
++ if [ "$status" = "1" ]; then
++
++ port=$(printf %02d $1)
++ if [ $port -ge 1 ] && [ $port -le 16 ];then
++ #XFP port
++ sfp_path=$(get_sfp_port_path "${port}")
++ sfp_is_present=`cat $sfp_path/sfp_is_present`
++ if [ "$sfp_is_present" == "1" ]; then
++ sfp_eeprom="hd $sfp_path/sfp_eeprom"
++ bias_ct=`$sfp_eeprom | grep "0060 " | awk -F' ' '{print $6 $7}'`
++ if [[ ! -z ${bias_ct} ]]; then
++ bias_ha=`$sfp_eeprom | grep "0010 " | awk -F' ' '{print $4 $5}'`
++ bias_la=`$sfp_eeprom | grep "0010 " | awk -F' ' '{print $6 $7}'`
++ bias_hw=`$sfp_eeprom | grep "0010 " | awk -F' ' '{print $8 $9}'`
++ bias_lw=`$sfp_eeprom | grep "0010 " | awk -F' ' '{print $10 $11}'`
++ res=$(check_bias_current $bias_ct $bias_ha $bias_la $bias_hw $bias_lw)
++ if [ $res -eq 0 ]; then
++ echo "OKAY [$bias_ct]"
++ elif [ $res -eq 1 ]; then
++ echo "WARN [$bias_ct]"
++ elif [ $res -eq 3 ]; then
++ echo "CRIT [$bias_ct]"
++ fi
++ fi
++ else
++ bias_ct=-1
++ echo "$bias_ct"
++ fi
++ elif [ $port -ge 17 ] && [ $port -le 20 ];then
++ qsfp_path=$(get_sfp_port_path "${port}")
++ qsfp_is_present=`cat $qsfp_path/sfp_is_present`
++ if [ "$qsfp_is_present" == "1" ]; then
++ qsfp_eeprom="hd $qsfp_path/sfp_eeprom"
++ #QSFP port
++ bias_c1=`$qsfp_eeprom | grep "0020 " | awk -F' ' '{print $12 $13}' `
++ bias_c2=`$qsfp_eeprom | grep "0020 " | awk -F' ' '{print $14 $15}' `
++ bias_c3=`$qsfp_eeprom | grep "0020 " | awk -F' ' '{print $16 $17}' `
++ bias_c4=`$qsfp_eeprom | grep "0030 " | awk -F' ' '{print $2 $3}' `
++ if [[ ! -z ${bias_c1} ]] && [[ ! -z ${bias_c2} ]] && [[ ! -z ${bias_c3} ]] && [[ ! -z ${bias_c4} ]] ; then
++ #get threshold values from qsfp_eeprom path with $port
++ bias_ha=`$qsfp_eeprom | grep "00230 " | awk -F' ' '{print $10 $11}'`
++ bias_la=`$qsfp_eeprom | grep "00230 " | awk -F' ' '{print $12 $13}'`
++ bias_hw=`$qsfp_eeprom | grep "00230 " | awk -F' ' '{print $14 $15}'`
++ bias_lw=`$qsfp_eeprom | grep "00230 " | awk -F' ' '{print $16 $17}'`
++ res_c1=$(check_bias_current $bias_c1 $bias_ha $bias_la $bias_hw $bias_lw)
++ res_c2=$(check_bias_current $bias_c2 $bias_ha $bias_la $bias_hw $bias_lw)
++ res_c3=$(check_bias_current $bias_c3 $bias_ha $bias_la $bias_hw $bias_lw)
++ res_c4=$(check_bias_current $bias_c4 $bias_ha $bias_la $bias_hw $bias_lw)
++ if [ $res_c1 -eq 0 ] && [ $res_c2 -eq 0 ] && [ $res_c3 -eq 0 ] && [ $res_c4 -eq 0 ] ; then
++ echo "OKAY [$bias_c1, $bias_c2, $bias_c3, $bias_c4]"
++ elif [ $res_c1 -eq 1 ] || [ $res_c2 -eq 1 ] || [ $res_c3 -eq 1 ] ||[ $res_c4 -eq 1 ] ; then
++ echo "WARN [$bias_c1, $bias_c2, $bias_c3, $bias_c4]"
++ elif [ $res_c1 -eq 3 ] || [ $res_c2 -eq 3 ] || [ $res_c3 -eq 3 ] ||[ $res_c4 -eq 3 ] ; then
++ echo "CRIT [$bias_c1, $bias_c2, $bias_c3, $bias_c4]"
++ fi
++ fi
++ else
++ bias_ct=-1
++ echo "$bias_ct"
++ fi
++ else
++ echo "wrong port number"
++ fi
++ else
++ echo "Port disabled"
++ fi
++}
++
+ get_max_port_num()
+ {
+ echo "${CURRENT_PORT_NUM}"
+@@ -554,6 +702,12 @@
+ "psu_power_out")
+ get_psu_power_out
+ ;;
++ "psu_fan_out")
++ get_psu_fan_out
++ ;;
++ "psu_temp_out")
++ get_psu_temp_out
++ ;;
+ "max_fan_num")
+ get_max_fan_num
+ ;;
+@@ -563,6 +717,12 @@
+ "sfp_port_status")
+ get_sfp_port_status "${3}"
+ ;;
++ "sfp_bias_current")
++ get_bias_current "${3}"
++ ;;
++ "sfp_path")
++ get_sfp_path "${3}"
++ ;;
+ "sfp_presence")
+ get_sfp_presence
+ ;;
+diff -ruN rsd_org/PSME/application/include/psme/rest/constants/chassis.hpp rsd_org_calsoft/PSME/application/include/psme/rest/constants/chassis.hpp
+--- rsd_org/PSME/application/include/psme/rest/constants/chassis.hpp 2017-12-19 13:19:16.492042958 +0530
++++ rsd_org_calsoft/PSME/application/include/psme/rest/constants/chassis.hpp 2017-12-15 17:55:54.238571548 +0530
+@@ -74,6 +74,10 @@
+ extern const char POWER_AVAILABLE[];
+ extern const char POWER_CAPACITY[];
+ extern const char POWER_CONSUMED[];
++/* ACL Added Begin */
++extern const char FAN_OUTPUT[];
++extern const char TEMP_OUTPUT[];
++/* ACL Added End */
+ extern const char POWER_SUPPLIES[];
+ extern const char LAST_POWER_OUTPUT[];
+ /*Nick Added Begin: */
+diff -ruN rsd_org/PSME/application/include/psme/rest/constants/constants.hpp rsd_org_calsoft/PSME/application/include/psme/rest/constants/constants.hpp
+--- rsd_org/PSME/application/include/psme/rest/constants/constants.hpp 2017-12-19 13:19:16.492042958 +0530
++++ rsd_org_calsoft/PSME/application/include/psme/rest/constants/constants.hpp 2017-12-15 17:56:03.283091747 +0530
+@@ -118,6 +118,17 @@
+ extern const char MODEL[];
+ extern const char SERIAL[];
+ extern const char PART_NUMBER[];
++/* ACL Added Begin */
++extern const char PRODUCT_NAME[];
++extern const char MAC_ADDRESS[];
++extern const char MAC_RANGE[];
++extern const char MANUFACTURE_DATE[];
++extern const char PLATFORM_NAME[];
++extern const char COUNTRY_CODE[];
++extern const char LABEL_REVISION[];
++extern const char DIAG_VERSION[];
++extern const char ONIE_VERSION[];
++/* ACL Added End */
+ extern const char ASSET_TAG[];
+ extern const char STATUS[];
+ extern const char STATE[];
+@@ -139,7 +150,6 @@
+ extern const char HASH[];
+ extern const char CHASSIS[];
+ extern const char RESET_TYPE[];
+-extern const char MAC_ADDRESS[];
+ }
+
+ namespace ErrorMessage {
+diff -ruN rsd_org/PSME/application/include/psme/rest/constants/ethernet.hpp rsd_org_calsoft/PSME/application/include/psme/rest/constants/ethernet.hpp
+--- rsd_org/PSME/application/include/psme/rest/constants/ethernet.hpp 2017-12-15 06:54:00.000000000 +0530
++++ rsd_org_calsoft/PSME/application/include/psme/rest/constants/ethernet.hpp 2017-12-19 13:09:05.036051150 +0530
+@@ -43,6 +43,7 @@
+ namespace EthernetSwitchPort {
+ extern const char PORT[];
+ extern const char PORT_ID[];
++extern const char BIAS_CURRENT[];
+ extern const char LINK_TYPE[];
+ extern const char OPERATIONAL_STATE[];
+ extern const char ADMINISTRATIVE_STATE[];
+diff -ruN rsd_org/PSME/application/include/psme/rest/constants/system.hpp rsd_org_calsoft/PSME/application/include/psme/rest/constants/system.hpp
+--- rsd_org/PSME/application/include/psme/rest/constants/system.hpp 2017-12-15 06:54:00.000000000 +0530
++++ rsd_org_calsoft/PSME/application/include/psme/rest/constants/system.hpp 2017-12-15 17:56:09.021959873 +0530
+@@ -59,6 +59,17 @@
+ extern const char TARGET_PORTAL_IP[];
+ extern const char TARGET_PORTAL_PORT[];
+ extern const char BIOS_VERSION[];
++/* ACL Added Begin */
++extern const char PRODUCT_NAME[];
++extern const char PLATFORM_NAME[];
++extern const char COUNTRY_CODE[];
++extern const char MAC_RANGE[];
++extern const char MAC_ADDRESS[];
++extern const char LABEL_REVISION[];
++extern const char MANUFACTURE_DATE[];
++extern const char DIAG_VERSION[];
++extern const char ONIE_VERSION[];
++/* ACL Added End */
+ extern const char PROCESSOR_SUMMARY[];
+ extern const char COUNT[];
+ extern const char MEMORY_SUMMARY[];
+diff -ruN rsd_org/PSME/application/src/rest/constants/chassis.cpp rsd_org_calsoft/PSME/application/src/rest/constants/chassis.cpp
+--- rsd_org/PSME/application/src/rest/constants/chassis.cpp 2017-12-19 13:19:16.492042958 +0530
++++ rsd_org_calsoft/PSME/application/src/rest/constants/chassis.cpp 2017-12-15 17:56:19.139016095 +0530
+@@ -66,6 +66,10 @@
+ const char POWER_AVAILABLE[] = "PowerAvailableWatts";
+ const char POWER_CAPACITY[] = "PowerCapacity";
+ const char POWER_CONSUMED[] = "PowerConsumedWatts";
++/* ACL Added Begin */
++const char TEMP_OUTPUT[] = "PsuTemperature";
++const char FAN_OUTPUT[] = "PsuFanRpm";
++/* ACL Added End */
+ const char POWER_SUPPLIES[] = "PowerSupplies";
+ const char LAST_POWER_OUTPUT[] = "LastPowerOutputWatts";
+ }
+diff -ruN rsd_org/PSME/application/src/rest/constants/constants.cpp rsd_org_calsoft/PSME/application/src/rest/constants/constants.cpp
+--- rsd_org/PSME/application/src/rest/constants/constants.cpp 2017-12-19 13:19:16.492042958 +0530
++++ rsd_org_calsoft/PSME/application/src/rest/constants/constants.cpp 2017-12-15 17:56:23.237064187 +0530
+@@ -100,6 +100,16 @@
+ const char MODEL[] = "Model";
+ const char SERIAL[] = "SerialNumber";
+ const char PART_NUMBER[] = "PartNumber";
++/* ACL Added Begin */
++const char PRODUCT_NAME[] = "ProductName";
++const char MAC_RANGE[] = "MACRange";
++const char MANUFACTURE_DATE[] = "ManufactureDate";
++const char COUNTRY_CODE[] = "CountryCode";
++const char LABEL_REVISION[] = "LabelRevision";
++const char PLATFORM_NAME[] = "PlatformName";
++const char DIAG_VERSION[] = "DiagVersion";
++const char ONIE_VERSION[] = "OnieVersion";
++/* ACL Added End */
+ const char ASSET_TAG[] = "AssetTag";
+ const char STATUS[] = "Status";
+ const char STATE[] = "State";
+diff -ruN rsd_org/PSME/application/src/rest/constants/ethernet.cpp rsd_org_calsoft/PSME/application/src/rest/constants/ethernet.cpp
+--- rsd_org/PSME/application/src/rest/constants/ethernet.cpp 2017-12-19 13:19:16.492042958 +0530
++++ rsd_org_calsoft/PSME/application/src/rest/constants/ethernet.cpp 2017-12-19 13:09:40.252050678 +0530
+@@ -38,6 +38,7 @@
+ namespace EthernetSwitchPort {
+ const char PORT[] = "Port";
+ const char PORT_ID[] = "PortId";
++const char BIAS_CURRENT[] = "BiasCurrent";
+ const char LINK_TYPE[] = "LinkType";
+ const char OPERATIONAL_STATE[] = "OperationalState";
+ const char ADMINISTRATIVE_STATE[] = "AdministrativeState";
+diff -ruN rsd_org/PSME/application/src/rest/constants/system.cpp rsd_org_calsoft/PSME/application/src/rest/constants/system.cpp
+--- rsd_org/PSME/application/src/rest/constants/system.cpp 2017-12-15 06:54:00.000000000 +0530
++++ rsd_org_calsoft/PSME/application/src/rest/constants/system.cpp 2017-12-15 17:56:28.175532295 +0530
+@@ -59,6 +59,17 @@
+ const char TARGET_PORTAL_IP[] = "TargetPortalIP";
+ const char TARGET_PORTAL_PORT[] = "TargetPortalPort";
+ const char BIOS_VERSION[] = "BiosVersion";
++/* ACL Added Begin */
++const char PRODUCT_NAME[] = "ProductName";
++const char MAC_ADDRESS[] = "MACAddress";
++const char MAC_RANGE[] = "MACRange";
++const char MANUFACTURE_DATE[] = "ManufactureDate";
++const char PLATFORM_NAME[] = "PlatformName";
++const char LABEL_REVISION[] = "LabelRevision";
++const char COUNTRY_CODE[] = "CountryCode";
++const char DIAG_VERSION[] = "DiagVersion";
++const char ONIE_VERSION[] = "OnieVersion";
++/* ACL Added End */
+ const char PROCESSOR_SUMMARY[] = "ProcessorSummary";
+ const char COUNT[] = "Count";
+ const char MEMORY_SUMMARY[] = "MemorySummary";
+diff -ruN rsd_org/PSME/application/src/rest/endpoints/chassis/thermal_zone.cpp rsd_org_calsoft/PSME/application/src/rest/endpoints/chassis/thermal_zone.cpp
+--- rsd_org/PSME/application/src/rest/endpoints/chassis/thermal_zone.cpp 2017-12-19 13:19:16.492042958 +0530
++++ rsd_org_calsoft/PSME/application/src/rest/endpoints/chassis/thermal_zone.cpp 2017-12-15 17:56:45.712296681 +0530
+@@ -65,7 +65,7 @@
+
+ if(tz_.get_temperature() == -1)
+ {
+- json["Temperature"]["Status"]["health"] = json::Value::Type::NIL;
++ json["Temperature"]["Status"]["Health"] = json::Value::Type::NIL;
+ json["Temperature"]["Status"]["State"] = "Disabled";
+
+ json["Temperature"]["ReadingCelsius"] = "0";
+@@ -74,22 +74,22 @@
+ {
+ if((tz_.get_temperature() < 0) || ((tz_.get_temperature() < 55000) && (tz_.get_temperature() >= 45000)))
+ {
+- json["Temperature"]["Status"]["health"] = "Warning";
++ json["Temperature"]["Status"]["Health"] = "Warning";
+ json["Temperature"]["Status"]["State"] = "Enabled";
+ }
+ else if((tz_.get_temperature() < 60000) && ((tz_.get_temperature() >= 55000)))
+ {
+- json["Temperature"]["Status"]["health"] = "Warning";
++ json["Temperature"]["Status"]["Health"] = "Warning";
+ json["Temperature"]["Status"]["State"] = "Enabled";
+ }
+ else if((tz_.get_temperature() >= 60000))
+ {
+- json["Temperature"]["Status"]["health"] = "Critical";
++ json["Temperature"]["Status"]["Health"] = "Critical";
+ json["Temperature"]["Status"]["State"] = "Enabled";
+ }
+ else
+ {
+- json["Temperature"]["Status"]["health"] = "OK";
++ json["Temperature"]["Status"]["Health"] = "OK";
+ json["Temperature"]["Status"]["State"] = "Enabled";
+ }
+ }
+@@ -175,6 +175,10 @@
+ json::Value rs;
+ rs[Common::ODATA_TYPE] = "Power.v1_0_0.PowerSupply";
+ rs[PowerZone::POWER_CONSUMED] = json::Value::Type::NIL;
++/* ACL Added Begin */
++ rs[PowerZone::TEMP_OUTPUT] = json::Value::Type::NIL;
++ rs[PowerZone::FAN_OUTPUT] = json::Value::Type::NIL;
++/* ACL Added End */
+
+ r["PowerSupply"] = std::move(rs);
+
+@@ -207,6 +211,38 @@
+ if (psu_.get_psu_id() == req_psu_id) {
+ json["PowerSupply"][Common::MEMBER_ID] = req_psu_id ;
+ json["PowerSupply"][PowerZone::POWER_CONSUMED] = (psu_.get_power_output() * 0.001);
++ /* ACL Added Begin */
++ json["PowerSupply"][PowerZone::TEMP_OUTPUT] = (psu_.get_temp_output() * 0.001);
++ json["PowerSupply"][PowerZone::FAN_OUTPUT] = (psu_.get_fan_output() * 0.001);
++ if (psu_.get_fan_output() < 0)
++ {
++ json["PowerSupply"]["Status"]["State"] = "Disabled";
++ json["PowerSupply"]["Status"]["Health"] = json::Value::Type::NIL;
++ }
++ else
++ {
++ if((psu_.get_temp_output() < 0) || ((psu_.get_temp_output() < 55000) && (psu_.get_temp_output() >= 45000)))
++ {
++ json["PowerSupply"]["Status"]["Health"] = "Warning";
++ json["PowerSupply"]["Status"]["State"] = "Enabled";
++ }
++ else if((psu_.get_temp_output() < 60000) && ((psu_.get_temp_output() >= 55000)))
++ {
++ json["PowerSupply"]["Status"]["Health"] = "Warning";
++ json["PowerSupply"]["Status"]["State"] = "Enabled";
++ }
++ else if((psu_.get_temp_output() >= 60000))
++ {
++ json["PowerSupply"]["Status"]["Health"] = "Critical";
++ json["PowerSupply"]["Status"]["State"] = "Enabled";
++ }
++ else
++ {
++ json["PowerSupply"]["Status"]["Health"] = "OK";
++ json["PowerSupply"]["Status"]["State"] = "Enabled";
++ }
++ }
++ /* ACL Added End */
+ }
+ }
+
+diff -ruN rsd_org/PSME/application/src/rest/endpoints/ethernet/ethernet_switch_port.cpp rsd_org_calsoft/PSME/application/src/rest/endpoints/ethernet/ethernet_switch_port.cpp
+--- rsd_org/PSME/application/src/rest/endpoints/ethernet/ethernet_switch_port.cpp 2017-12-19 13:19:16.496042958 +0530
++++ rsd_org_calsoft/PSME/application/src/rest/endpoints/ethernet/ethernet_switch_port.cpp 2017-12-19 13:11:09.044049488 +0530
+@@ -58,6 +58,7 @@
+ r[Common::NAME] = "Ethernet Switch Port";
+ r[Common::DESCRIPTION] = "Ethernet Switch Port description";
+ r[constants::EthernetSwitchPort::PORT_ID] = json::Value::Type::NIL;
++ r[constants::EthernetSwitchPort::BIAS_CURRENT] = json::Value::Type::NIL;
+ r[Common::STATUS][Common::STATE] = json::Value::Type::NIL;
+ r[Common::STATUS][Common::HEALTH] = json::Value::Type::NIL;
+ r[Common::STATUS][Common::HEALTH_ROLLUP] = json::Value::Type::NIL;
+@@ -401,18 +402,43 @@
+ if( std::stoi(req.params[PathParam::ETHERNET_SWITCH_ID])==1)//mgmt port
+ sprintf(command, "cat /sys/class/net/%s/operstate", "ma1");
+ else
+- sprintf(command, "psme.sh get sfp_port_status %d" , std::stoi(req.params[PathParam::SWITCH_PORT_ID]));
++ {
++ //sprintf(command, "psme.sh get sfp_port_status %d" , std::stoi(req.params[PathParam::SWITCH_PORT_ID]));
++ /* ACL Added Begin */
++ sprintf(command, "psme.sh get sfp_bias_current %d" , std::stoi(req.params[PathParam::SWITCH_PORT_ID]));
++ log_debug(GET_LOGGER("ethernet"), "Ethernet switch command" << command);
++ /* ACL Added End */
++ }
+
+ memset(resultA,0x0, sizeof(resultA));
+
+ exec_shell(command, resultA);
++/* ACL Added Begin */
++ if( std::stoi(req.params[PathParam::ETHERNET_SWITCH_ID]) !=1)//mgmt port
++ {
++ resultA[strlen(resultA) -1] = '\0';
++ r[constants::EthernetSwitchPort::BIAS_CURRENT] = resultA+5;
++ }
++
+
+- if(!strncmp(resultA, "1", 1) || !strncmp("up", resultA, 2))
++ if(!strncmp(resultA, "OKAY", 4) || !strncmp("up", resultA, 2))
+ {
+ r[Common::STATUS][Common::STATE] = "Enabled";
+ r[Common::STATUS][Common::HEALTH] = "OK";
+ r[Common::STATUS][Common::HEALTH_ROLLUP] = "OK";
+ }
++ else if(!strncmp(resultA, "WARN", 4))
++ {
++ r[Common::STATUS][Common::STATE] = "Enabled";
++ r[Common::STATUS][Common::HEALTH] = "Warning";
++ r[Common::STATUS][Common::HEALTH_ROLLUP] = "N/A";
++ }
++ else if(!strncmp(resultA, "CRIT", 4))
++ {
++ r[Common::STATUS][Common::STATE] = "Enabled";
++ r[Common::STATUS][Common::HEALTH] = "Critical";
++ r[Common::STATUS][Common::HEALTH_ROLLUP] = "N/A";
++ }
+ else
+ {
+ r[Common::STATUS][Common::STATE] = "Disabled";
+@@ -420,6 +446,7 @@
+ r[Common::STATUS][Common::HEALTH_ROLLUP] = "N/A";
+ }
+ }
++/* ACL Added End */
+ /* Nick disable //
+ r[Common::STATUS][Common::HEALTH_ROLLUP] =
+ endpoint::HealthRollup<agent_framework::model::EthernetSwitchPort>().get(port.get_uuid());
+diff -ruN rsd_org/PSME/application/src/rest/endpoints/system/system.cpp rsd_org_calsoft/PSME/application/src/rest/endpoints/system/system.cpp
+--- rsd_org/PSME/application/src/rest/endpoints/system/system.cpp 2017-12-19 13:19:16.496042958 +0530
++++ rsd_org_calsoft/PSME/application/src/rest/endpoints/system/system.cpp 2017-12-15 17:57:14.950909325 +0530
+@@ -68,6 +68,17 @@
+ response[System::INDICATOR_LED] = json::Value::Type::NIL;
+ response[System::POWER_STATE] = json::Value::Type::NIL;
+ response[System::BIOS_VERSION] = json::Value::Type::NIL;
++ /* ACL Added Begin */
++ response[System::PRODUCT_NAME] = json::Value::Type::NIL;
++ response[System::MAC_ADDRESS] = json::Value::Type::NIL;
++ response[System::MAC_RANGE] = json::Value::Type::NIL;
++ response[System::MANUFACTURE_DATE] = json::Value::Type::NIL;
++ response[System::PLATFORM_NAME] = json::Value::Type::NIL;
++ response[System::LABEL_REVISION] = json::Value::Type::NIL;
++ response[System::COUNTRY_CODE] = json::Value::Type::NIL;
++ response[System::DIAG_VERSION] = json::Value::Type::NIL;
++ response[System::ONIE_VERSION] = json::Value::Type::NIL;
++ /* ACL Added End */
+
+ json::Value boot;
+ boot[Common::ODATA_TYPE] = "#ComputerSystem.v1_1_0.Boot";
+@@ -324,7 +335,6 @@
+
+ endpoint::System::~System() {}
+
+-
+ void endpoint::System::get(const server::Request& req, server::Response& res) {
+ auto response = make_prototype();
+ response[Common::ODATA_ID] = PathBuilder(req).build();
+@@ -339,6 +349,17 @@
+ response[Common::MODEL] = system.get_fru_info().get_model_number();
+ response[Common::SERIAL] = system.get_fru_info().get_serial_number();
+ response[Common::PART_NUMBER] = system.get_fru_info().get_part_number();
++ /* ACL Added Begin */
++ response[Common::PRODUCT_NAME] = system.get_fru_info().get_product_name();
++ response[Common::MAC_ADDRESS] = system.get_fru_info().get_mac_address();
++ response[Common::MAC_RANGE] = system.get_fru_info().get_mac_range();
++ response[Common::MANUFACTURE_DATE] = system.get_fru_info().get_manufacture_date();
++ response[Common::PLATFORM_NAME] = system.get_fru_info().get_platform_name();
++ response[Common::COUNTRY_CODE] = system.get_fru_info().get_country_code();
++ response[Common::LABEL_REVISION] = system.get_fru_info().get_label_revision();
++ response[Common::DIAG_VERSION] = system.get_fru_info().get_diag_version();
++ response[Common::ONIE_VERSION] = system.get_fru_info().get_onie_version();
++ /* ACL Added End */
+ response[constants::Common::UUID] = ServiceUuid::get_instance()->get_service_uuid();
+ endpoint::status_to_json(system, response);
+ response[Common::STATUS][Common::HEALTH_ROLLUP] =
+@@ -359,10 +380,7 @@
+ }
+
+
+-
+-
+ }
+-
+ response[constants::System::SKU] = system.get_sku();
+ response[constants::Common::ASSET_TAG] = system.get_asset_tag();
+ response[constants::System::INDICATOR_LED] = system.get_indicator_led();
+diff -ruN rsd_org/PSME/common/agent-framework/include/agent-framework/module/constants/chassis.hpp rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/constants/chassis.hpp
+--- rsd_org/PSME/common/agent-framework/include/agent-framework/module/constants/chassis.hpp 2017-12-19 13:19:16.496042958 +0530
++++ rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/constants/chassis.hpp 2017-12-15 17:57:26.028445568 +0530
+@@ -107,6 +107,10 @@
+ static constexpr const char SLOT[] = "slot";
+ static constexpr const char POWER_INPUT[] = "powerInput";
+ static constexpr const char POWER_OUTPUT[] = "powerOutput";
++ /* ACL Added Begin */
++ static constexpr const char TEMP_OUTPUT[] = "tempOutput";
++ static constexpr const char FAN_OUTPUT[] = "fanOutput";
++ /* ACL Added End */
+ static constexpr const char POWER_CAPACITY[] = "powerCapacity";
+ static constexpr const char FRU_INFO[] = "fruInfo";
+ static constexpr const char OEM[] = "oem";
+@@ -125,6 +129,10 @@
+ static constexpr const char ZONE[] = "zone";
+ static constexpr const char STATUS[] = "status";
+ static constexpr const char POWER_INPUT[] = "powerInput";
++/* ACL Added Begin */
++ static constexpr const char FAN_OUTPUT[] = "fanOutput";
++ static constexpr const char TEMP_OUTPUT[] = "tempOutput";
++/* ACL Added End */
+ static constexpr const char POWER_OUTPUT[] = "powerOutput";
+ static constexpr const char POWER_CAPACITY[] = "powerCapacity";
+ static constexpr const char COLLECTIONS[] = "collections";
+diff -ruN rsd_org/PSME/common/agent-framework/include/agent-framework/module/constants/common.hpp rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/constants/common.hpp
+--- rsd_org/PSME/common/agent-framework/include/agent-framework/module/constants/common.hpp 2017-12-15 06:54:00.000000000 +0530
++++ rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/constants/common.hpp 2017-12-15 17:57:40.789978871 +0530
+@@ -52,6 +52,17 @@
+ static constexpr const char MANUFACTURER[] = "manufacturer";
+ static constexpr const char MODEL[] = "modelNumber";
+ static constexpr const char PART[] = "partNumber";
++ /* ACL Added Begin */
++ static constexpr const char PRODUCT_NAME[] = "productName";
++ static constexpr const char MAC_ADDRESS[] = "macAddress";
++ static constexpr const char MAC_RANGE[] = "macRange";
++ static constexpr const char MANUFACTURE_DATE[] = "manufactureDate";
++ static constexpr const char PLATFORM_NAME[] = "platformName";
++ static constexpr const char COUNTRY_CODE[] = "countryCode";
++ static constexpr const char LABEL_REVISION[] = "labelRevision";
++ static constexpr const char DIAG_VERSION[] = "diagVersion";
++ static constexpr const char ONIE_VERSION[] = "onieVersion";
++ /* ACL Added End */
+ };
+
+ /*!
+diff -ruN rsd_org/PSME/common/agent-framework/include/agent-framework/module/constants/pnc.hpp rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/constants/pnc.hpp
+--- rsd_org/PSME/common/agent-framework/include/agent-framework/module/constants/pnc.hpp 2017-12-15 06:54:00.000000000 +0530
++++ rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/constants/pnc.hpp 2017-12-19 13:12:07.532048705 +0530
+@@ -68,6 +68,7 @@
+ static constexpr const char PORT[] = "port";
+ static constexpr const char STATUS[] = "status";
+ static constexpr const char PORT_ID[] = "portId";
++ static constexpr const char BIAS_CURRENT[] = "bias_current";
+ static constexpr const char PORT_TYPE[] = "portType";
+ static constexpr const char CABLE_ID[] = "cableId";
+ static constexpr const char OPERATIONAL_STATE[] = "operationalState";
+diff -ruN rsd_org/PSME/common/agent-framework/include/agent-framework/module/model/attributes/fru_info.hpp rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/model/attributes/fru_info.hpp
+--- rsd_org/PSME/common/agent-framework/include/agent-framework/module/model/attributes/fru_info.hpp 2017-12-15 06:54:00.000000000 +0530
++++ rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/model/attributes/fru_info.hpp 2017-12-15 17:57:53.069981406 +0530
+@@ -40,10 +40,32 @@
+ FruInfo(const std::string& serial_number,
+ const std::string& manufacturer,
+ const std::string& model_number,
++ /* ACL Added Begin */
++ const std::string& product_name,
++ const std::string& mac_address,
++ const std::string& mac_range,
++ const std::string& manufacture_date,
++ const std::string& platform_name,
++ const std::string& label_revision,
++ const std::string& country_code,
++ const std::string& diag_version,
++ const std::string& onie_version,
++ /* ACL Added End */
+ const std::string& part_number):
+ m_serial_number{serial_number},
+ m_manufacturer{manufacturer},
+ m_model_number{model_number},
++ /* ACL Added Begin */
++ m_product_name{product_name},
++ m_mac_address{mac_address},
++ m_mac_range{mac_range},
++ m_manufacture_date{manufacture_date},
++ m_platform_name{platform_name},
++ m_label_revision{label_revision},
++ m_country_code{country_code},
++ m_diag_version{diag_version},
++ m_onie_version{onie_version},
++ /* ACL Added End */
+ m_part_number{part_number}
+ {}
+
+@@ -120,6 +142,151 @@
+ return m_part_number;
+ }
+
++ /* ACL Added Begin */
++ /*!
++ * Sets product name
++ *
++ * @param[in] product name product name
++ * */
++ void set_product_name(const OptionalField<std::string>& product_name) {
++ m_product_name = product_name;
++ }
++
++ /*!
++ * Gets product name
++ * */
++ const OptionalField<std::string>& get_product_name() const {
++ return m_product_name;
++ }
++
++ /*!
++ * Sets MAC address
++ *
++ * @param[in] MAC address MAC address
++ * */
++ void set_mac_address(const OptionalField<std::string>& mac_address) {
++ m_mac_address = mac_address;
++ }
++
++ /*!
++ * Gets MAC address
++ * */
++ const OptionalField<std::string>& get_mac_address() const {
++ return m_mac_address;
++ }
++
++ /*!
++ * Sets MAC Range
++ *
++ * @param[in] MAC Range MAC Range
++ * */
++ void set_mac_range(const OptionalField<std::string>& mac_range) {
++ m_mac_range = mac_range;
++ }
++
++ /*!
++ * Gets MAC range
++ * */
++ const OptionalField<std::string>& get_mac_range() const {
++ return m_mac_range;
++ }
++
++ /*!
++ * Sets Manufacture date
++ *
++ * @param[in] Manufacture date Manufacture date
++ * */
++ void set_manufacture_date(const OptionalField<std::string>& manufacture_date) {
++ m_manufacture_date = manufacture_date;
++ }
++
++ /*!
++ * Gets Manufacture date
++ * */
++ const OptionalField<std::string>& get_manufacture_date() const {
++ return m_manufacture_date;
++ }
++
++ /*!
++ * Sets Platform Name
++ *
++ * @param[in] Platform Name Platform Name
++ * */
++ void set_platform_name(const OptionalField<std::string>& platform_name) {
++ m_platform_name = platform_name;
++ }
++
++ /*!
++ * Gets Platform Name
++ * */
++ const OptionalField<std::string>& get_platform_name() const {
++ return m_platform_name;
++ }
++
++ /*!
++ * Sets Label Revision
++ *
++ * @param[in] Label Revision Label Revision
++ * */
++ void set_label_revision(const OptionalField<std::string>& label_revision) {
++ m_label_revision = label_revision;
++ }
++
++ /*!
++ * Gets Label Revision
++ * */
++ const OptionalField<std::string>& get_label_revision() const {
++ return m_label_revision;
++ }
++
++ /*!
++ * Sets Country Code
++ *
++ * @param[in] Country Code Country Code
++ * */
++ void set_country_code(const OptionalField<std::string>& country_code) {
++ m_country_code = country_code;
++ }
++
++ /*!
++ * Gets Country Code
++ * */
++ const OptionalField<std::string>& get_country_code() const {
++ return m_country_code;
++ }
++
++ /*!
++ * Sets Diag Version
++ *
++ * @param[in] Diag version Diag version
++ * */
++ void set_diag_version(const OptionalField<std::string>& diag_version) {
++ m_diag_version = diag_version;
++ }
++
++ /*!
++ * Gets Diag Version
++ * */
++ const OptionalField<std::string>& get_diag_version() const {
++ return m_diag_version;
++ }
++
++ /*!
++ * Sets Onie Version
++ *
++ * @param[in] Onie version Onie version
++ * */
++ void set_onie_version(const OptionalField<std::string>& onie_version) {
++ m_onie_version = onie_version;
++ }
++
++ /*!
++ * Gets Onie Version
++ * */
++ const OptionalField<std::string>& get_onie_version() const {
++ return m_onie_version;
++ }
++/* ACL Added End */
+ /*!
+ * Converts this to json representation.
+ *
+@@ -141,6 +308,17 @@
+ OptionalField<std::string> m_manufacturer{};
+ OptionalField<std::string> m_model_number{};
+ OptionalField<std::string> m_part_number{};
++ /* ACL Added Begin */
++ OptionalField<std::string> m_product_name{};
++ OptionalField<std::string> m_mac_address{};
++ OptionalField<std::string> m_mac_range{};
++ OptionalField<std::string> m_manufacture_date{};
++ OptionalField<std::string> m_platform_name{};
++ OptionalField<std::string> m_country_code{};
++ OptionalField<std::string> m_label_revision{};
++ OptionalField<std::string> m_diag_version{};
++ OptionalField<std::string> m_onie_version{};
++ /* ACL Added End */
+ };
+
+ }
+diff -ruN rsd_org/PSME/common/agent-framework/include/agent-framework/module/model/power_zone.hpp rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/model/power_zone.hpp
+--- rsd_org/PSME/common/agent-framework/include/agent-framework/module/model/power_zone.hpp 2017-12-19 13:19:16.496042958 +0530
++++ rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/model/power_zone.hpp 2017-12-15 17:58:03.141982386 +0530
+@@ -127,6 +127,43 @@
+ void set_power_output(const OptionalField<double> power_output) {
+ m_power_output = power_output;
+ }
++ /* ACL Added Begin */
++ /*!
++ * @brief setter for psu_fan_output attribute
++ *
++ * @param psu_fan_output of type double
++ */
++ void set_fan_output(const OptionalField<double> fan_output) {
++ m_fan_output = fan_output;
++ }
++
++ /*!
++ * @brief return psu_fan_output attribute
++ *
++ * @return the psu fan output value
++ */
++ OptionalField<double> get_fan_output() const {
++ return m_fan_output;
++ }
++
++ /*!
++ * @brief setter for psu_temp_output attribute
++ *
++ * @param psu_temp_output of type double
++ */
++ void set_temp_output(const OptionalField<double> temp_output) {
++ m_temp_output = temp_output;
++ }
++
++ /*!
++ * @brief return psu_temp_output attribute
++ *
++ * @return psu_temp_output of type double
++ */
++ OptionalField<double> get_temp_output() const {
++ return m_temp_output;
++ }
++ /* ACL Added Begin */
+
+ /*Nick Added Begin: */
+ /*!
+@@ -179,6 +216,10 @@
+
+ OptionalField<double> m_power_input{0.0};
+ OptionalField<double> m_power_output{0.0};
++ /* ACL Added Begin */
++ OptionalField<double> m_fan_output{0.0};
++ OptionalField<double> m_temp_output{0.0};
++ /* ACL Added End */
+ OptionalField<double> m_power_capacity{0.0};
+
+ static const enums::CollectionName collection_name;
+diff -ruN rsd_org/PSME/common/agent-framework/include/agent-framework/module/model/psu.hpp rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/model/psu.hpp
+--- rsd_org/PSME/common/agent-framework/include/agent-framework/module/model/psu.hpp 2017-12-19 13:19:16.496042958 +0530
++++ rsd_org_calsoft/PSME/common/agent-framework/include/agent-framework/module/model/psu.hpp 2017-12-15 17:58:10.985982559 +0530
+@@ -137,6 +137,44 @@
+ m_power_output = power_output;
+ }
+
++ /* ACL Added Begin */
++ /*!
++
++ * @brief return fan_output of type double
++ *
++ * @return the fan_output value
++ */
++ OptionalField<double> get_fan_output() const {
++ return m_fan_output;
++ }
++
++ /*!
++ * @brief setter for fan_output attribute
++ *
++ * @param fan_output of type double
++ */
++ void set_fan_output(const OptionalField<double> fan_output) {
++ m_fan_output = fan_output;
++ }
++
++ /*!
++ * @brief return temp_output of type double
++ *
++ * @return the temp_output value
++ */
++ OptionalField<double> get_temp_output() const {
++ return m_temp_output;
++ }
++
++ /*!
++ * @brief setter for temp_output attribute
++ *
++ * @param temp_output of type double
++ */
++ void set_temp_output(const OptionalField<double> temp_output) {
++ m_temp_output = temp_output;
++ }
++/* ACL Added End */
+ /*!
+ * @brief return an object fru_info of class attribute::FruInfo
+ *
+@@ -201,6 +239,10 @@
+ OptionalField<uint32_t> m_slot{0u};
+ OptionalField<double> m_power_input{0.0};
+ OptionalField<double> m_power_output{0.0};
++ /* ACL Added Begin */
++ OptionalField<double> m_temp_output{0.0};
++ OptionalField<double> m_fan_output{0.0};
++ /* ACL Added End */
+ OptionalField<double> m_power_capacity{0.0};
+ attribute::FruInfo m_fru_info{};
+ /*Nick Added Begin: */
+diff -ruN rsd_org/PSME/common/agent-framework/src/module/constants/chassis.cpp rsd_org_calsoft/PSME/common/agent-framework/src/module/constants/chassis.cpp
+--- rsd_org/PSME/common/agent-framework/src/module/constants/chassis.cpp 2017-12-19 13:19:16.496042958 +0530
++++ rsd_org_calsoft/PSME/common/agent-framework/src/module/constants/chassis.cpp 2017-12-15 17:58:27.809982930 +0530
+@@ -74,6 +74,10 @@
+ constexpr const char Psu::SLOT[];
+ constexpr const char Psu::POWER_INPUT[];
+ constexpr const char Psu::POWER_OUTPUT[];
++/* ACL Added Begin */
++constexpr const char Psu::TEMP_OUTPUT[];
++constexpr const char Psu::FAN_OUTPUT[];
++/* ACL Added End */
+ constexpr const char Psu::POWER_CAPACITY[];
+ constexpr const char Psu::FRU_INFO[];
+ constexpr const char Psu::OEM[];
+@@ -88,6 +92,10 @@
+ constexpr const char PowerZone::STATUS[];
+ constexpr const char PowerZone::POWER_INPUT[];
+ constexpr const char PowerZone::POWER_OUTPUT[];
++/* ACL Added Begin */
++constexpr const char PowerZone::TEMP_OUTPUT[];
++constexpr const char PowerZone::FAN_OUTPUT[];
++/* ACL Added End */
+ constexpr const char PowerZone::POWER_CAPACITY[];
+ constexpr const char PowerZone::COLLECTIONS[];
+ constexpr const char PowerZone::OEM[];
+diff -ruN rsd_org/PSME/common/agent-framework/src/module/constants/common.cpp rsd_org_calsoft/PSME/common/agent-framework/src/module/constants/common.cpp
+--- rsd_org/PSME/common/agent-framework/src/module/constants/common.cpp 2017-12-15 06:54:00.000000000 +0530
++++ rsd_org_calsoft/PSME/common/agent-framework/src/module/constants/common.cpp 2017-12-15 17:58:32.633983036 +0530
+@@ -41,6 +41,17 @@
+ constexpr const char FruInfo::MANUFACTURER[];
+ constexpr const char FruInfo::MODEL[];
+ constexpr const char FruInfo::PART[];
++/* ACL Added Begin */
++constexpr const char FruInfo::PRODUCT_NAME[];
++constexpr const char FruInfo::MAC_ADDRESS[];
++constexpr const char FruInfo::MAC_RANGE[];
++constexpr const char FruInfo::PLATFORM_NAME[];
++constexpr const char FruInfo::MANUFACTURE_DATE[];
++constexpr const char FruInfo::COUNTRY_CODE[];
++constexpr const char FruInfo::LABEL_REVISION[];
++constexpr const char FruInfo::DIAG_VERSION[];
++constexpr const char FruInfo::ONIE_VERSION[];
++/* ACL Added End */
+
+ constexpr const char Collections::COLLECTIONS[];
+ constexpr const char Collections::NAME[];
+diff -ruN rsd_org/PSME/common/agent-framework/src/module/model/attributes/fru_info.cpp rsd_org_calsoft/PSME/common/agent-framework/src/module/model/attributes/fru_info.cpp
+--- rsd_org/PSME/common/agent-framework/src/module/model/attributes/fru_info.cpp 2017-12-15 06:54:00.000000000 +0530
++++ rsd_org_calsoft/PSME/common/agent-framework/src/module/model/attributes/fru_info.cpp 2017-12-15 17:58:40.433983208 +0530
+@@ -39,6 +39,17 @@
+ json[literals::FruInfo::PART] = get_part_number();
+ json[literals::FruInfo::SERIAL] = get_serial_number();
+ json[literals::FruInfo::MODEL] = get_model_number();
++/* ACL Added Begin */
++ json[literals::FruInfo::PRODUCT_NAME] = get_product_name();
++ json[literals::FruInfo::MAC_ADDRESS] = get_mac_address();
++ json[literals::FruInfo::MAC_RANGE] = get_mac_range();
++ json[literals::FruInfo::MANUFACTURE_DATE] = get_manufacture_date();
++ json[literals::FruInfo::PLATFORM_NAME] = get_platform_name();
++ json[literals::FruInfo::COUNTRY_CODE] = get_country_code();
++ json[literals::FruInfo::LABEL_REVISION] = get_label_revision();
++ json[literals::FruInfo::DIAG_VERSION] = get_diag_version();
++ json[literals::FruInfo::ONIE_VERSION] = get_onie_version();
++/* ACL Added End */
+ return json;
+ }
+
+@@ -48,5 +59,16 @@
+ fru_info.set_manufacturer(json[literals::FruInfo::MANUFACTURER]);
+ fru_info.set_model_number(json[literals::FruInfo::MODEL]);
+ fru_info.set_part_number(json[literals::FruInfo::PART]);
++/* ACL Added Begin */
++ fru_info.set_product_name(json[literals::FruInfo::PRODUCT_NAME]);
++ fru_info.set_mac_address(json[literals::FruInfo::MAC_ADDRESS]);
++ fru_info.set_mac_range(json[literals::FruInfo::MAC_RANGE]);
++ fru_info.set_manufacture_date(json[literals::FruInfo::MANUFACTURE_DATE]);
++ fru_info.set_platform_name(json[literals::FruInfo::PLATFORM_NAME]);
++ fru_info.set_country_code(json[literals::FruInfo::COUNTRY_CODE]);
++ fru_info.set_label_revision(json[literals::FruInfo::LABEL_REVISION]);
++ fru_info.set_diag_version(json[literals::FruInfo::DIAG_VERSION]);
++ fru_info.set_onie_version(json[literals::FruInfo::ONIE_VERSION]);
++/* ACL Added End */
+ return fru_info;
+ }
+diff -ruN rsd_org/PSME/common/agent-framework/src/module/model/power_zone.cpp rsd_org_calsoft/PSME/common/agent-framework/src/module/model/power_zone.cpp
+--- rsd_org/PSME/common/agent-framework/src/module/model/power_zone.cpp 2017-12-19 13:19:16.496042958 +0530
++++ rsd_org_calsoft/PSME/common/agent-framework/src/module/model/power_zone.cpp 2017-12-15 17:58:48.009983375 +0530
+@@ -40,6 +40,10 @@
+ result[literals::PowerZone::STATUS] = get_status().to_json();
+ result[literals::PowerZone::POWER_INPUT] = get_power_input();
+ result[literals::PowerZone::POWER_OUTPUT] = get_power_output();
++/* ACL Added Begin */
++ result[literals::PowerZone::TEMP_OUTPUT] = get_temp_output();
++ result[literals::PowerZone::FAN_OUTPUT] = get_fan_output();
++/* ACL Added End */
+ result[literals::PowerZone::POWER_CAPACITY] = get_power_capacity();
+ result[literals::PowerZone::COLLECTIONS] = get_collections().to_json();
+ result[literals::PowerZone::OEM] = get_oem().to_json();
+@@ -56,6 +60,10 @@
+ zone.set_status(attribute::Status::from_json(json[literals::PowerZone::STATUS]));
+ zone.set_power_input(json[literals::PowerZone::POWER_INPUT]);
+ zone.set_power_output(json[literals::PowerZone::POWER_OUTPUT]);
++/* ACL Added Begin */
++ zone.set_fan_output(json[literals::PowerZone::FAN_OUTPUT]);
++ zone.set_temp_output(json[literals::PowerZone::TEMP_OUTPUT]);
++/* ACL Added End */
+ zone.set_power_capacity(
+ json[literals::PowerZone::POWER_CAPACITY]);
+ zone.set_collections(Collections::from_json(
+diff -ruN rsd_org/PSME/common/agent-framework/src/module/model/psu.cpp rsd_org_calsoft/PSME/common/agent-framework/src/module/model/psu.cpp
+--- rsd_org/PSME/common/agent-framework/src/module/model/psu.cpp 2017-12-19 13:19:16.496042958 +0530
++++ rsd_org_calsoft/PSME/common/agent-framework/src/module/model/psu.cpp 2017-12-15 17:58:54.681983522 +0530
+@@ -39,6 +39,10 @@
+ result[literals::Psu::SLOT] = get_slot();
+ result[literals::Psu::POWER_INPUT] = get_power_input();
+ result[literals::Psu::POWER_OUTPUT] = get_power_output();
++/* ACL Added Begin */
++ result[literals::Psu::FAN_OUTPUT] = get_fan_output();
++ result[literals::Psu::TEMP_OUTPUT] = get_temp_output();
++/* ACL Added End */
+ result[literals::Psu::POWER_CAPACITY] = get_power_capacity();
+ result[literals::Psu::FRU_INFO] = get_fru_info().to_json();
+ result[literals::Psu::OEM] = get_oem().to_json();
+@@ -56,6 +60,10 @@
+ psu.set_slot(json[literals::Psu::SLOT].asUInt());
+ psu.set_power_input(json[literals::Psu::POWER_INPUT].asDouble());
+ psu.set_power_output(json[literals::Psu::POWER_OUTPUT].asDouble());
++/* ACL Added Begin */
++ psu.set_fan_output(json[literals::Psu::FAN_OUTPUT].asDouble());
++ psu.set_temp_output(json[literals::Psu::TEMP_OUTPUT].asDouble());
++/* ACL Added End */
+ psu.set_power_capacity(json[literals::Psu::POWER_CAPACITY].asDouble());
+ psu.set_oem(attribute::Oem::from_json(json[literals::Psu::OEM]));
+ psu.set_resource_hash(json);
+diff -ruN rsd_org/RMM/src/core/snmp_subagentd/CMakeLists.txt rsd_org_calsoft/RMM/src/core/snmp_subagentd/CMakeLists.txt
+--- rsd_org/RMM/src/core/snmp_subagentd/CMakeLists.txt 2017-12-15 06:54:00.000000000 +0530
++++ rsd_org_calsoft/RMM/src/core/snmp_subagentd/CMakeLists.txt 2017-12-15 17:59:01.145983664 +0530
+@@ -1,13 +1,13 @@
+-SET(TARGET SNMPSubagentd)
+-
+-AUX_SOURCE_DIRECTORY(. SRC_LIST)
+-
+-SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
+-
+-LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/lib)
+-SET(SNMP_AGENT_NEED_LIBS librmm_init.so librmm_cfg.so librmm_redfish.so librmm_wrap.so librmm_log.so librmm_utils.a librmm_jsonrpcapi.so librmm_jsonrpc.so librmm_json.so libnetsnmpmibs.a libnetsnmpagent.a libnetsnmp.a libcrypto.a libssl.a libcurl.a librmm_jsonrpcapi.so librmm_securec.so)
+-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/include)
+-INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}/include)
+-
+-ADD_EXECUTABLE(${TARGET} ${SRC_LIST})
+-TARGET_LINK_LIBRARIES(${TARGET} ${SNMP_AGENT_NEED_LIBS} libuuid.so libdl.so)
++#SET(TARGET SNMPSubagentd)
++#
++#AUX_SOURCE_DIRECTORY(. SRC_LIST)
++#
++#SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
++#
++#LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/lib)
++#SET(SNMP_AGENT_NEED_LIBS librmm_init.so librmm_cfg.so librmm_redfish.so librmm_wrap.so librmm_log.so librmm_utils.a librmm_jsonrpcapi.so librmm_jsonrpc.so librmm_json.so libnetsnmpmibs.a libnetsnmpagent.a libnetsnmp.a libcrypto.a libssl.a libcurl.a librmm_jsonrpcapi.so librmm_securec.so)
++#INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/include)
++#INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}/include)
++#
++#ADD_EXECUTABLE(${TARGET} ${SRC_LIST})
++#TARGET_LINK_LIBRARIES(${TARGET} ${SNMP_AGENT_NEED_LIBS} libuuid.so libdl.so)
+diff -ruN rsd_org/RMM/src/deps/CMakeLists.txt rsd_org_calsoft/RMM/src/deps/CMakeLists.txt
+--- rsd_org/RMM/src/deps/CMakeLists.txt 2017-12-15 06:54:00.000000000 +0530
++++ rsd_org_calsoft/RMM/src/deps/CMakeLists.txt 2017-12-15 17:59:05.777983766 +0530
+@@ -1,6 +1,6 @@
+ ADD_SUBDIRECTORY(uuid)
+ ADD_SUBDIRECTORY(openssl)
+ ADD_SUBDIRECTORY(libcurl)
+-ADD_SUBDIRECTORY(snmp)
+-ADD_SUBDIRECTORY(stunnel)
+-ADD_SUBDIRECTORY(flatui)
++#ADD_SUBDIRECTORY(snmp)
++#ADD_SUBDIRECTORY(stunnel)
++#ADD_SUBDIRECTORY(flatui)
+diff -ruN rsd_org/RMM/utils/deb_maker/install/multi-deb/sh/prepare.sh rsd_org_calsoft/RMM/utils/deb_maker/install/multi-deb/sh/prepare.sh
+--- rsd_org/RMM/utils/deb_maker/install/multi-deb/sh/prepare.sh 2017-12-19 13:19:16.596042956 +0530
++++ rsd_org_calsoft/RMM/utils/deb_maker/install/multi-deb/sh/prepare.sh 2017-12-15 17:59:22.449984133 +0530
+@@ -56,11 +56,11 @@
+ cp $PROJ_PATH/build/utils/redfish/MR.json $ITEM_PATH/var/rmm/redfish
+ cp $PROJ_PATH/build/utils/cfg/rmm.cfg $ITEM_PATH/etc/rmm
+ cp $PROJ_PATH/build/utils/cfg/pwm_rpm.cfg $ITEM_PATH/etc/rmm
+-cp $PROJ_PATH/build/utils/encrypt_text/keyfile $ITEM_PATH/etc/rmm
++#cp $PROJ_PATH/build/utils/encrypt_text/keyfile $ITEM_PATH/etc/rmm
+ cp $PROJ_PATH/src/VERSION $ITEM_PATH/etc/rmm
+
+-cp $PROJ_PATH/build/bin/ptasd $ITEM_PATH/usr/local/bin/
+-cp $PROJ_PATH/build/bin/OEM_coe_file $ITEM_PATH/var/rmm/
++#cp $PROJ_PATH/build/bin/ptasd $ITEM_PATH/usr/local/bin/
++#cp $PROJ_PATH/build/bin/OEM_coe_file $ITEM_PATH/var/rmm/
+ cp $PROJ_PATH/build/bin/Memdbd $ITEM_PATH/usr/local/bin/
+ cp $PROJ_PATH/build/bin/IPMIModule $ITEM_PATH/usr/local/bin
+ cp $PROJ_PATH/build/bin/Assetd $ITEM_PATH/usr/local/bin
+@@ -68,10 +68,10 @@
+ cp $PROJ_PATH/build/bin/Registerd $ITEM_PATH/usr/local/bin
+ cp $PROJ_PATH/build/bin/RMMLogd $ITEM_PATH/usr/local/bin
+ cp $PROJ_PATH/build/bin/Upgraded $ITEM_PATH/usr/local/bin
+-cp $PROJ_PATH/build/bin/SNMPSubagentd $ITEM_PATH/usr/local/bin
++#cp $PROJ_PATH/build/bin/SNMPSubagentd $ITEM_PATH/usr/local/bin
+ cp $PROJ_PATH/build/bin/cm_reset $ITEM_PATH/usr/local/bin
+-cp $PROJ_PATH/build/bin/snmpd $ITEM_PATH/usr/local/bin
+-cp $PROJ_PATH/build/bin/stunnel $ITEM_PATH/usr/local/bin
++#cp $PROJ_PATH/build/bin/snmpd $ITEM_PATH/usr/local/bin
++#cp $PROJ_PATH/build/bin/stunnel $ITEM_PATH/usr/local/bin
+ cp $PROJ_PATH/build/bin/rmm_post_install $ITEM_PATH/usr/local/bin
+ cp $PROJ_PATH/build/bin/rmm_super $ITEM_PATH/usr/local/bin
+
+@@ -90,7 +90,7 @@
+
+
+ cp $PSME_PROJ_PATH/bin/psme-rest-server $ITEM_PATH/usr/local/bin
+-cp $PSME_PROJ_PATH/bin/psme-network-stubs $ITEM_PATH/usr/local/bin
++#cp $PSME_PROJ_PATH/bin/psme-network-stubs $ITEM_PATH/usr/local/bin
+ cp $PSME_PROJ_PATH/bin/psme-chassis $ITEM_PATH/usr/local/bin
+ cp $PSME_PROJ_PATH/lib/libjsoncpp.so.999 $ITEM_PATH/usr/local/lib
+ cp $PSME_PROJ_PATH/lib/libjsonrpccpp-server.so.999 $ITEM_PATH/usr/local/lib
+@@ -141,13 +141,13 @@
+ $CUR_PATH/modify_ver.sh $ITEM_PATH
+
+ #5
+-ITEM_PATH=$CUR_PATH/../net-snmp
++#ITEM_PATH=$CUR_PATH/../net-snmp
+
+ mkdir -p $ITEM_PATH/usr/local/bin
+ del_file $ITEM_PATH/usr/local/bin/
+
+-mkdir -p $ITEM_PATH/etc/snmp
+-del_file $ITEM_PATH/etc/snmp/
++#mkdir -p $ITEM_PATH/etc/snmp
++#del_file $ITEM_PATH/etc/snmp/
+
+ mkdir -p $ITEM_PATH/usr/local/lib
+ del_file $ITEM_PATH/usr/local/lib/
+@@ -155,10 +155,10 @@
+ #mkdir -p $ITEM_PATH/usr/local/share/snmp/mibs
+ #del_file $ITEM_PATH/usr/local/share/snmp/mibs
+
+-cp $PROJ_PATH/build/lib/libnet* $ITEM_PATH/usr/local/lib
+-cp $PROJ_PATH/build/bin/snmp* $ITEM_PATH/usr/local/bin/
++#cp $PROJ_PATH/build/lib/libnet* $ITEM_PATH/usr/local/lib
++#cp $PROJ_PATH/build/bin/snmp* $ITEM_PATH/usr/local/bin/
+ #copy snmp config file
+-cp $PROJ_PATH/src/core/snmp_subagentd/config/*.conf $ITEM_PATH/etc/snmp/
++#cp $PROJ_PATH/src/core/snmp_subagentd/config/*.conf $ITEM_PATH/etc/snmp/
+ #copy mibs file
+ #cp $PROJ_PATH/src/core/snmp_subagentd/*.txt $ITEM_PATH/usr/local/share/snmp/mibs/
+ #cp $PROJ_PATH/src/dep/snmp/net-snmp-5.7.3/mibs/*.txt $ITEM_PATH/usr/local/share/snmp/mibs/
diff --git a/asfvolt16_redfish_service/remove.sh b/asfvolt16_redfish_service/remove.sh
new file mode 100644
index 0000000..3995f2f
--- /dev/null
+++ b/asfvolt16_redfish_service/remove.sh
@@ -0,0 +1,21 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+
+sudo service psme stop
+sudo dpkg --purge rmm-all
+sudo dpkg --purge rmm-consolecontrol
+sudo dpkg --purge rmm-api
+sudo dpkg --purge rmm-base
diff --git a/asfvolt16_redfish_service/scripts/build_psme_prepare.sh b/asfvolt16_redfish_service/scripts/build_psme_prepare.sh
new file mode 100644
index 0000000..4eb14fc
--- /dev/null
+++ b/asfvolt16_redfish_service/scripts/build_psme_prepare.sh
@@ -0,0 +1,140 @@
+#!/bin/bash
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+# Run from OpenNetworkLinux top directory
+#
+
+# override shell variables to match custom local build environment
+
+: ${ONL_DIR=`pwd`}
+: ${ASFVOLT16_RSD_DIR:=${ONL_DIR}/asfvolt16-driver/asfvolt16_redfish_service}
+: ${RSD_TOPDIR:=${ASFVOLT16_RSD_DIR}/rsd_org}
+: ${PSM_TOPDIR:=${RSD_TOPDIR}/PSME}
+: ${RMM_TOPDIR:=${RSD_TOPDIR}/RMM}
+: ${PSM_DEPDIR:=${PSM_TOPDIR}/third_party}
+: ${RMM_DEPDIR:=${RMM_TOPDIR}/src/deps}
+: ${PKG_TOPDIR:=${RSD_TOPDIR}/asfvolt16_rf_packages}
+: ${RMM_UUID:=${RMM_DEPDIR}/uuid}
+: ${RMM_CURL:=${RMM_DEPDIR}/libcurl}
+: ${RMM_OSSL:=${RMM_DEPDIR}/openssl}
+
+
+cd ${ASFVOLT16_RSD_DIR}
+#Remove exisiting IntelRSD Source Code and download from google drive
+rm -rf rsd_org rsd_org.tar.gz
+wget -O rsd_org.tar.gz 'https://drive.google.com/uc?export=download&id=1vIbd_yGVyuLaWK0nUwm6H3xy1XLDDkR8'
+tar -xf rsd_org.tar.gz
+cd rsd_org
+
+#Download accton patch from google drive and apply to IntelRSD
+echo "Downloading and Applying accton.patch"
+wget -O ${ASFVOLT16_RSD_DIR}/accton.patch 'https://drive.google.com/uc?export=download&id=191UUhYbqnDTuwrSl2S9P8D7fNoMQw1YE'
+patch -p1 < ${ASFVOLT16_RSD_DIR}/accton.patch
+
+#Apply Calsoft patch
+echo "Applying calsoft.patch"
+patch -p1 < ${ASFVOLT16_RSD_DIR}/calsoft.patch
+
+#Install cmake version to 3.5.2 required for IntelRSD build
+CMAKE_VER=`cmake -version | grep "cmake version" | awk '{print $3}'`
+if [ "${CMAKE_VER}" != "3.5.2" ]; then
+ sudo apt-get purge cmake
+ wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz
+ tar xzvf cmake-3.5.2.tar.gz
+ cd cmake-3.5.2/
+ ./bootstrap
+ make -j4
+ sudo make install
+ if [ -e /usr/bin/cmake ]; then
+ sudo rm /usr/bin/cmake
+ fi
+ sudo ln -s /usr/local/bin/cmake /usr/bin/cmake
+fi
+
+echo "Cmake Version ${CMAKE_VER} installed"
+
+#Download 3rd party code required for PSME
+cd ${PSM_DEPDIR}
+wget https://github.com/open-source-parsers/jsoncpp/archive/1.7.2.zip
+mv 1.7.2.zip jsoncpp-1.7.2.zip
+
+wget https://github.com/cinemast/libjson-rpc-cpp/archive/v0.6.0.zip
+mv v0.6.0.zip jsonrpccpp-0.6.0.zip
+
+wget http://downloads.sourceforge.net/project/ipmitool/ipmitool/1.8.17/ipmitool-1.8.17.tar.bz2
+
+wget https://github.com/01org/safestringlib/archive/master.zip
+mv master.zip safestring-0.0.1.zip
+
+wget https://github.com/google/googletest/archive/release-1.7.0.zip
+mv release-1.7.0.zip gtest-1.7.0.zip
+
+wget https://github.com/google/googlemock/archive/release-1.7.0.zip
+mv release-1.7.0.zip gmock-1.7.0.zip
+
+cd -
+
+cd ${RMM_UUID}
+wget http://www.mirrorservice.org/sites/ftp.ossp.org/pkg/lib/uuid/uuid-1.6.2.tar.gz
+
+cd ${RMM_CURL}
+wget https://curl.haxx.se/download/curl-7.40.0.tar.bz2
+
+cd ${RMM_OSSL}
+wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz
+
+cd ${RSD_TOPDIR}
+
+#Build PSME
+echo ""
+echo "Building PSME"
+echo ""
+chmod 777 ${PSM_TOPDIR}/agent/network/acc_sw/psme.sh
+chmod 777 ${RMM_TOPDIR}/utils/deb_maker/install/multi-deb/rmm-all/etc/init.d/psme
+cd ${PSM_TOPDIR}
+if [ ! -d "build" ]; then
+ mkdir build
+fi
+cd build; cmake ../
+grep -rl Werror . | grep flags.make | xargs sed -i 's/-Werror//g'
+make psme-rest-server psme-chassis -j8
+
+
+#Create Debian Packages
+echo ""
+echo "Creating Debian Package"
+echo ""
+cd ${RMM_TOPDIR}/utils
+./rmm_release.sh <<!
+A
+!
+
+#Copying generated packages to $BIN_DIRECTORY
+echo "PSME debian packages are created in ${RMM_TOPDIR}/build/install/multi-deb/bin/rmm-bin-2.1.3.38.0/"
+echo "Copying Debian packages to ${PKG_TOPDIR}"
+if [ ! -d ${PKG_TOPDIR} ]; then
+ mkdir ${PKG_TOPDIR}
+fi
+
+`cp -a ${RMM_TOPDIR}/build/install/multi-deb/bin/rmm-bin-2.1.3.38.0/* ${PKG_TOPDIR}`
+`cp ${ASFVOLT16_RSD_DIR}/remove.sh ${PKG_TOPDIR}`
+echo ""
+echo "ASFVOLT16 Redfish service build finished !!!"
+echo "Packages are available in ${PKG_TOPDIR}"
+
+cd ${ONL_DIR}
+
diff --git a/asfvolt16_redfish_service/scripts/install_dependencies.sh b/asfvolt16_redfish_service/scripts/install_dependencies.sh
new file mode 100644
index 0000000..1e7ec3f
--- /dev/null
+++ b/asfvolt16_redfish_service/scripts/install_dependencies.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+#
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+# Run from OpenNetworkLinux top directory
+#
+#Install required packages
+
+echo ""
+echo "Installing dependency Packages"
+echo ""
+
+sudo apt-get update
+
+sudo apt-get install clang --yes
+sudo apt-get install -f
+sudo apt-get install libgcrypt20-dev libncurses5-dev libnl-3-dev --yes
+sudo apt-get install -f
+sudo apt-get install libudev-dev libglibmm-2.4-dev libglib3.0-cil-dev --yes
+sudo apt-get install -f
+sudo apt-get install libxml++2.6-dev libgnutls28-dev libnl-route-3-dev --yes
+sudo apt-get install -f
+sudo apt-get install flex bison doxygen cpp ccache build-essential linux-libc-dev --yes
+sudo apt-get install -f
+sudo apt-get install libmpc-dev libstdc++6 libcurl4-openssl-dev libmicrohttpd-dev libjsoncpp-dev --yes
+sudo apt-get install -f
+sudo apt-get install lcov libossp-uuid-dev libxml++2.6-dev libnl-3-dev libnl-route-3-200 --yes
+sudo apt-get install -f
+sudo apt-get install libudev-dev libgcrypt20-dev libsysfs-dev libpopt-dev --yes
+sudo apt-get install -f
+sudo apt-get install libusb-dev patch libdevmapper-dev liblvm2-dev unzip libnl-genl-3-dev libblkid-dev debsigs debsig-verify gnupg --yes
+sudo apt-get install -f
+sudo apt-get install ipmitool --yes
+sudo apt-get install -f
+