From bb1d7b86bbed6e94716db2370fc795353e645228 Mon Sep 17 00:00:00 2001 From: dongxiancun <dongxiancun@cmhi.chinamobile.com> Date: Wed, 4 Sep 2019 14:37:17 +0800 Subject: [PATCH] =?UTF-8?q?Mod=20aaa-12=201=EF=BC=89=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=9B=9E=E6=BB=9A=E5=88=B0o-sr4=E7=89=88=E6=9C=AC=EF=BC=9B2?= =?UTF-8?q?=EF=BC=89=E4=BF=AE=E5=A4=8Dyangtools=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?bug=EF=BC=88=E4=BB=A3=E7=A0=81=E5=9C=A8git=E7=9A=84yangtools?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E4=B8=8B=EF=BC=89=E3=80=82=20RCA=EF=BC=9A=20?= =?UTF-8?q?SOL=EF=BC=9A=20=E4=BF=AE=E6=94=B9=E4=BA=BA=EF=BC=9Adongxiancun?= =?UTF-8?q?=20=E6=A3=80=E8=A7=86=E4=BA=BA=EF=BC=9Adongxiancun?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/yang/tp-extension.yang | 4 +- .../huawei/impl/HuaweiNetconfSpeaker.java | 106 +++++++++++++++--- 2 files changed, 93 insertions(+), 17 deletions(-) diff --git a/ControlPlatform/driver-layer/adaptation-layer/src/main/yang/tp-extension.yang b/ControlPlatform/driver-layer/adaptation-layer/src/main/yang/tp-extension.yang index 21d774231..f16e56e1b 100644 --- a/ControlPlatform/driver-layer/adaptation-layer/src/main/yang/tp-extension.yang +++ b/ControlPlatform/driver-layer/adaptation-layer/src/main/yang/tp-extension.yang @@ -38,11 +38,11 @@ module tp-extension { } leaf tx-rate { type int16 ; - default "单位为Mbps"; + description "单位为Mbps"; } leaf rx-rate { type int16 ; - default "单位为Mbps"; + description "单位为Mbps"; } list ip-address { leaf ip { diff --git a/ControlPlatform/driver-layer/drivers/huawei/src/main/java/com/cmcc/cmhi/huawei/impl/HuaweiNetconfSpeaker.java b/ControlPlatform/driver-layer/drivers/huawei/src/main/java/com/cmcc/cmhi/huawei/impl/HuaweiNetconfSpeaker.java index 4bc1f9c9b..9ef31f32b 100644 --- a/ControlPlatform/driver-layer/drivers/huawei/src/main/java/com/cmcc/cmhi/huawei/impl/HuaweiNetconfSpeaker.java +++ b/ControlPlatform/driver-layer/drivers/huawei/src/main/java/com/cmcc/cmhi/huawei/impl/HuaweiNetconfSpeaker.java @@ -26,6 +26,8 @@ import org.opendaylight.yang.gen.v1.http.www.huawei.com.netconf.vrp.huawei.ifm.r import org.opendaylight.yang.gen.v1.http.www.huawei.com.netconf.vrp.huawei.ifm.rev181123.IfmcommAdminStaType; import org.opendaylight.yang.gen.v1.http.www.huawei.com.netconf.vrp.huawei.ifm.rev181123.ifm.Interfaces; import org.opendaylight.yang.gen.v1.http.www.huawei.com.netconf.vrp.huawei.ifm.rev181123.ifm.interfaces.Interface; +//import org.opendaylight.yang.gen.v1.http.www.huawei.com.netconf.vrp.huawei.ifm.rev181123.ifm.interfaces._interface.ipv4config.am4cfgaddrs.Am4CfgAddr; +//import org.opendaylight.yang.gen.v1.http.www.huawei.com.netconf.vrp.huawei.ifm.rev181123.ifm.interfaces._interface.ipv6config.am6cfgaddrs.Am6CfgAddr; import org.opendaylight.yang.gen.v1.http.www.huawei.com.netconf.vrp.huawei.ifm.rev181123.ifm.interfaces._interface.ipv4config.am4cfgaddrs.Am4CfgAddr; import org.opendaylight.yang.gen.v1.http.www.huawei.com.netconf.vrp.huawei.ifm.rev181123.ifm.interfaces._interface.ipv6config.am6cfgaddrs.Am6CfgAddr; import org.opendaylight.yang.gen.v1.urn.cmcc.cmhi.adaptation.layer.device.status.rev190809.NodeCpu; @@ -486,6 +488,67 @@ public class HuaweiNetconfSpeaker implements DataTreeChangeListener<ConnectorInf // } // }); + InstanceIdentifier<Interfaces> interfacesIID = + InstanceIdentifier.create(Ifm.class).child(Interfaces.class); + + Optional<Interfaces> interfacesOptional; + try { + // Read from a transaction is asynchronous, but a simple + // get/checkedGet makes the call synchronous + interfacesOptional = hwNodeReadTx.read(LogicalDatastoreType.OPERATIONAL, interfacesIID).checkedGet(); + } catch (ReadFailedException e) { + throw new IllegalStateException("Unexpected error reading data from " + nodeId, e); + } + List<TpInfos> tpInfosList = new ArrayList<>(); + if (interfacesOptional.isPresent()) { + List<Interface> interfaceList = interfacesOptional.get().getInterface(); + for (Interface intf : interfaceList) { + LOG.info("Show NodeId {}, IfName is {},IfIndex is {} ", + nodeId, intf.getIfName().getValue(), intf.getIfIndex()); + TpInfosBuilder tpInfosBuilder = new TpInfosBuilder(); + List<IpAddress> ipsOnIntf = getiplist(intf); + tpInfosBuilder.setIpAddress(ipsOnIntf); + if (Objects.nonNull(intf.getIfMtu())) { + tpInfosBuilder.setMtu(intf.getIfMtu().shortValue()); + } + tpInfosBuilder.setTpName(intf.getIfName().getValue()); + tpInfosBuilder.setTpNumber(intf.getIfNumber()); + tpInfosBuilder.setTpAdminStatus(buildTpAdmin(intf.getIfAdminStatus())); + tpInfosBuilder.setTpPhyType(intf.getIfPhyType().getName()); + tpInfosList.add(tpInfosBuilder.build()); + } + } else { + LOG.info("No data present on path '{}' for mountpoint: {}", + iid, nodeId); + } + + + //write interface information to layer + final WriteTransaction writeTransaction3 = dataBroker.newWriteOnlyTransaction(); + for (int i = 0; i < tpInfosList.size(); i++) { + InstanceIdentifier<TpExt> tpinfosIID = NETCONF_TOPO_IID + .child(Node.class, new NodeKey(new NodeId(nodeId))) + .child(TerminationPoint.class, new TerminationPointKey(new TpId(tpInfosList.get(i).getTpName()))) + .augmentation(TpExt.class); + writeTransaction3.put(LogicalDatastoreType.OPERATIONAL, tpinfosIID, + new TpExtBuilder() + .setTpInfos(tpInfosList.get(i)) + .build(), + true + ); + } + Futures.addCallback(writeTransaction3.submit(), new FutureCallback<Void>() { + @Override + public void onFailure(Throwable throwable) { + LOG.error("Write tp information information failed." + throwable.getMessage()); + } + + @Override + public void onSuccess(Void avoid) { + LOG.info("Write tp information information success."); + } + }); + } private TpAdminStatus buildTpAdmin(IfmcommAdminStaType ifAdminStatus) { @@ -496,23 +559,36 @@ public class HuaweiNetconfSpeaker implements DataTreeChangeListener<ConnectorInf } private List<IpAddress> getiplist(Interface intf) { - List<Am4CfgAddr> list = intf.getIpv4Config().getAm4CfgAddrs().getAm4CfgAddr(); - List<Am6CfgAddr> am6CfgAddrList = intf.getIpv6Config().getAm6CfgAddrs().getAm6CfgAddr(); List<IpAddress> addressList = new ArrayList<>(); - for (Am4CfgAddr cfg : list) { - IpAddressBuilder builder = new IpAddressBuilder(); - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress ip = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress(Ipv4Address.getDefaultInstance(cfg.getIfIpAddr().getValue())); - builder.setIp(ip); - IpAddress tmpAddress = builder.build(); - addressList.add(tmpAddress); + List<Am4CfgAddr> list = null; + List<Am6CfgAddr> am6CfgAddrList = null; + try { + list = intf.getIpv4Config().getAm4CfgAddrs().getAm4CfgAddr(); + } catch (NullPointerException e) { + LOG.debug("端口:{}无ipv4配置.", intf.getIfName()); } - - for (Am6CfgAddr am6CfgAddr : am6CfgAddrList) { - IpAddressBuilder builder = new IpAddressBuilder(); - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress ip = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress(Ipv6Address.getDefaultInstance(am6CfgAddr.getIfIp6Addr().getValue())); - builder.setIp(ip); - IpAddress tmpAddress = builder.build(); - addressList.add(tmpAddress); + if(Objects.nonNull(list)) { + for (Am4CfgAddr cfg : list) { + IpAddressBuilder builder = new IpAddressBuilder(); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress ip = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress(Ipv4Address.getDefaultInstance(cfg.getIfIpAddr().getValue())); + builder.setIp(ip); + IpAddress tmpAddress = builder.build(); + addressList.add(tmpAddress); + } + } + try { + am6CfgAddrList = intf.getIpv6Config().getAm6CfgAddrs().getAm6CfgAddr(); + } catch (NullPointerException e) { + LOG.debug("端口:{}无ipv6配置.", intf.getIfName()); + } + if(Objects.nonNull(am6CfgAddrList)) { + for (Am6CfgAddr am6CfgAddr : am6CfgAddrList) { + IpAddressBuilder builder = new IpAddressBuilder(); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress ip = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress(Ipv6Address.getDefaultInstance(am6CfgAddr.getIfIp6Addr().getValue())); + builder.setIp(ip); + IpAddress tmpAddress = builder.build(); + addressList.add(tmpAddress); + } } return addressList; }