@Singleton public class InterfacemgrProvider extends Object implements AutoCloseable, IInterfaceManager
Modifier and Type | Class and Description |
---|---|
class |
InterfacemgrProvider.ParentRefUpdateWorker |
Constructor and Description |
---|
InterfacemgrProvider(org.opendaylight.controller.md.sal.binding.api.DataBroker dataBroker,
org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService entityOwnershipService,
IdManagerService idManager,
InterfaceManagerRpcService interfaceManagerRpcService,
org.opendaylight.infrautils.jobcoordinator.JobCoordinator coordinator,
InterfaceManagerCommonUtils interfaceManagerCommonUtils,
InterfaceMetaUtils interfaceMetaUtils,
IfmConfig ifmConfig,
IfmDiagStatusProvider ifmStatusProvider) |
Modifier and Type | Method and Description |
---|---|
void |
addBridgeForNodeIid(org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeIid,
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation bridge) |
void |
addNodeIidForInterface(String interfaceName,
org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeIid) |
void |
addTerminationPointForInterface(String interfaceName,
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation terminationPoint) |
void |
bindService(String interfaceName,
Class<? extends ServiceModeBase> serviceMode,
BoundServices serviceInfo) |
void |
bindService(String interfaceName,
Class<? extends ServiceModeBase> serviceMode,
BoundServices serviceInfo,
TypedWriteTransaction<Datastore.Configuration> tx) |
void |
close() |
void |
createVLANInterface(String interfaceName,
String portName,
BigInteger dpId,
Integer vlanId,
String description,
IfL2vlan.L2vlanMode l2vlanMode)
Create a VLAN interface.
|
void |
createVLANInterface(String interfaceName,
String portName,
BigInteger dpId,
Integer vlanId,
String description,
IfL2vlan.L2vlanMode l2vlanMode,
boolean isExternal)
Create a VLAN interface.
|
com.google.common.util.concurrent.ListenableFuture<Void> |
createVLANInterface(String interfaceName,
String portName,
Integer vlanId,
String description,
IfL2vlan.L2vlanMode l2vlanMode) |
com.google.common.util.concurrent.ListenableFuture<Void> |
createVLANInterface(String interfaceName,
String portName,
Integer vlanId,
String description,
IfL2vlan.L2vlanMode l2vlanMode,
boolean isExternal) |
Map<String,org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus> |
getBfdStateCache() |
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation |
getBridgeForNodeIid(org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeIid) |
List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface> |
getChildInterfaces(org.opendaylight.controller.md.sal.binding.api.ReadTransaction tx,
String parentInterface)
Retrieve an interface's children.
|
List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface> |
getChildInterfaces(String parentInterface)
Retrieve an interface's children.
|
org.opendaylight.controller.md.sal.binding.api.DataBroker |
getDataBroker() |
String |
getDpidForInterface(String interfaceName) |
String |
getDpidForInterface(String interfaceName,
org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeInstanceId) |
BigInteger |
getDpnForInterface(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface intrf) |
BigInteger |
getDpnForInterface(String ifName) |
String |
getEndpointIpForDpn(BigInteger dpnId) |
org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService |
getEntityOwnershipService() |
List<ActionInfo> |
getInterfaceEgressActions(String ifName) |
InterfaceInfo |
getInterfaceInfo(String interfaceName) |
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface |
getInterfaceInfoFromConfigDataStore(org.opendaylight.controller.md.sal.binding.api.ReadTransaction tx,
String interfaceName)
Retrieve the interface information from the configuration datastore.
|
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface |
getInterfaceInfoFromConfigDataStore(String interfaceName)
Retrieve the interface information from the configuration datastore.
|
InterfaceInfo |
getInterfaceInfoFromOperationalDataStore(String interfaceName) |
InterfaceInfo |
getInterfaceInfoFromOperationalDataStore(String interfaceName,
InterfaceInfo.InterfaceType interfaceType) |
InterfaceInfo |
getInterfaceInfoFromOperationalDSCache(String interfaceName)
This API is currently used only for CLI usage.
|
long |
getLogicalTunnelSelectGroupId(int lportTag) |
org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> |
getNodeIidForInterface(String interfaceName) |
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation |
getOvsdbBridgeForInterface(String interfaceName) |
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation |
getOvsdbBridgeForNodeIid(org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeIid) |
String |
getParentRefNameForInterface(String interfaceName) |
Long |
getPortForInterface(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface intf) |
Long |
getPortForInterface(String ifName) |
String |
getPortNameForInterface(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId nodeConnectorId,
String interfaceName) |
String |
getPortNameForInterface(String dpnId,
String interfaceName) |
List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation> |
getPortsOnBridge(BigInteger dpnId) |
Map<Class<? extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeBase>,List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation>> |
getPortsOnBridgeByType(BigInteger dpnId)
Get all termination points by type on a given DPN.
|
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation |
getTerminationPoint(String interfaceName) |
Map<String,org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation> |
getTerminationPointCache() |
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation |
getTerminationPointForInterface(String interfaceName) |
List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation> |
getTunnelPortsOnBridge(BigInteger dpnId)
Get all termination points of type tunnel on a given DPN.
|
List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface> |
getVlanInterfaces() |
List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface> |
getVxlanInterfaces() |
boolean |
isExternalInterface(org.opendaylight.controller.md.sal.binding.api.ReadTransaction tx,
String interfaceName)
Determine whether an interface is external.
|
boolean |
isExternalInterface(String interfaceName)
Determine whether an interface is external.
|
boolean |
isItmDirectTunnelsEnabled() |
boolean |
isServiceBoundOnInterfaceForEgress(short servicePriority,
String interfaceName) |
boolean |
isServiceBoundOnInterfaceForIngress(short servicePriority,
String interfaceName) |
InterfaceInfo |
populateInterfaceInfo(String interfaceName,
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState) |
void |
removeBridgeForNodeIid(org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeIid) |
void |
removeNodeIidForInterface(String interfaceName) |
void |
removeTerminationPointForInterface(String interfaceName) |
void |
start() |
void |
unbindService(String interfaceName,
Class<? extends ServiceModeBase> serviceMode,
BoundServices serviceInfo) |
void |
updateInterfaceParentRef(String interfaceName,
String parentInterface) |
void |
updateInterfaceParentRef(String interfaceName,
String parentInterface,
boolean readInterfaceBeforeWrite) |
@Inject public InterfacemgrProvider(org.opendaylight.controller.md.sal.binding.api.DataBroker dataBroker, org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService entityOwnershipService, IdManagerService idManager, InterfaceManagerRpcService interfaceManagerRpcService, org.opendaylight.infrautils.jobcoordinator.JobCoordinator coordinator, InterfaceManagerCommonUtils interfaceManagerCommonUtils, InterfaceMetaUtils interfaceMetaUtils, IfmConfig ifmConfig, IfmDiagStatusProvider ifmStatusProvider)
public void start()
@PreDestroy public void close() throws Exception
close
in interface AutoCloseable
Exception
public org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService getEntityOwnershipService()
public org.opendaylight.controller.md.sal.binding.api.DataBroker getDataBroker()
public Long getPortForInterface(String ifName)
getPortForInterface
in interface IInterfaceManager
public Long getPortForInterface(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface intf)
getPortForInterface
in interface IInterfaceManager
public InterfaceInfo getInterfaceInfo(String interfaceName)
getInterfaceInfo
in interface IInterfaceManager
public InterfaceInfo getInterfaceInfoFromOperationalDataStore(String interfaceName, InterfaceInfo.InterfaceType interfaceType)
getInterfaceInfoFromOperationalDataStore
in interface IInterfaceManager
public InterfaceInfo getInterfaceInfoFromOperationalDataStore(String interfaceName)
getInterfaceInfoFromOperationalDataStore
in interface IInterfaceManager
public InterfaceInfo populateInterfaceInfo(String interfaceName, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState)
public InterfaceInfo getInterfaceInfoFromOperationalDSCache(String interfaceName)
IInterfaceManager
getInterfaceInfoFromOperationalDSCache
in interface IInterfaceManager
public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface getInterfaceInfoFromConfigDataStore(String interfaceName)
IInterfaceManager
getInterfaceInfoFromConfigDataStore
in interface IInterfaceManager
interfaceName
- The interface name.public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface getInterfaceInfoFromConfigDataStore(org.opendaylight.controller.md.sal.binding.api.ReadTransaction tx, String interfaceName) throws org.opendaylight.controller.md.sal.common.api.data.ReadFailedException
IInterfaceManager
getInterfaceInfoFromConfigDataStore
in interface IInterfaceManager
tx
- The transaction to use.interfaceName
- The interface name.org.opendaylight.controller.md.sal.common.api.data.ReadFailedException
- if an exception occurs while reading from the datastore.public void createVLANInterface(String interfaceName, String portName, BigInteger dpId, Integer vlanId, String description, IfL2vlan.L2vlanMode l2vlanMode) throws InterfaceAlreadyExistsException
IInterfaceManager
createVLANInterface
in interface IInterfaceManager
InterfaceAlreadyExistsException
public com.google.common.util.concurrent.ListenableFuture<Void> createVLANInterface(String interfaceName, String portName, Integer vlanId, String description, IfL2vlan.L2vlanMode l2vlanMode) throws InterfaceAlreadyExistsException
createVLANInterface
in interface IInterfaceManager
InterfaceAlreadyExistsException
public void createVLANInterface(String interfaceName, String portName, BigInteger dpId, Integer vlanId, String description, IfL2vlan.L2vlanMode l2vlanMode, boolean isExternal) throws InterfaceAlreadyExistsException
IInterfaceManager
createVLANInterface
in interface IInterfaceManager
InterfaceAlreadyExistsException
public com.google.common.util.concurrent.ListenableFuture<Void> createVLANInterface(String interfaceName, String portName, Integer vlanId, String description, IfL2vlan.L2vlanMode l2vlanMode, boolean isExternal) throws InterfaceAlreadyExistsException
createVLANInterface
in interface IInterfaceManager
InterfaceAlreadyExistsException
public boolean isServiceBoundOnInterfaceForIngress(short servicePriority, String interfaceName)
isServiceBoundOnInterfaceForIngress
in interface IInterfaceManager
public boolean isServiceBoundOnInterfaceForEgress(short servicePriority, String interfaceName)
isServiceBoundOnInterfaceForEgress
in interface IInterfaceManager
public void bindService(String interfaceName, Class<? extends ServiceModeBase> serviceMode, BoundServices serviceInfo)
bindService
in interface IInterfaceManager
public void bindService(String interfaceName, Class<? extends ServiceModeBase> serviceMode, BoundServices serviceInfo, TypedWriteTransaction<Datastore.Configuration> tx)
bindService
in interface IInterfaceManager
public void unbindService(String interfaceName, Class<? extends ServiceModeBase> serviceMode, BoundServices serviceInfo)
unbindService
in interface IInterfaceManager
public BigInteger getDpnForInterface(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface intrf)
getDpnForInterface
in interface IInterfaceManager
public BigInteger getDpnForInterface(String ifName)
getDpnForInterface
in interface IInterfaceManager
public String getEndpointIpForDpn(BigInteger dpnId)
getEndpointIpForDpn
in interface IInterfaceManager
public List<ActionInfo> getInterfaceEgressActions(String ifName)
getInterfaceEgressActions
in interface IInterfaceManager
public List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface> getVlanInterfaces()
getVlanInterfaces
in interface IInterfaceManager
public List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface> getVxlanInterfaces()
getVxlanInterfaces
in interface IInterfaceManager
public List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface> getChildInterfaces(String parentInterface)
IInterfaceManager
getChildInterfaces
in interface IInterfaceManager
parentInterface
- The parent interface.public List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface> getChildInterfaces(org.opendaylight.controller.md.sal.binding.api.ReadTransaction tx, String parentInterface) throws org.opendaylight.controller.md.sal.common.api.data.ReadFailedException
IInterfaceManager
getChildInterfaces
in interface IInterfaceManager
tx
- The transaction to use.parentInterface
- The parent interface.org.opendaylight.controller.md.sal.common.api.data.ReadFailedException
- if an exception occurs while reading from the datastore.public boolean isExternalInterface(String interfaceName)
IInterfaceManager
isExternalInterface
in interface IInterfaceManager
interfaceName
- The interface name.true
if the interface is external, false
if it isn't.public boolean isExternalInterface(org.opendaylight.controller.md.sal.binding.api.ReadTransaction tx, String interfaceName) throws org.opendaylight.controller.md.sal.common.api.data.ReadFailedException
IInterfaceManager
isExternalInterface
in interface IInterfaceManager
tx
- The transaction to use.interfaceName
- The interface name.true
if the interface is external, false
if it isn't.org.opendaylight.controller.md.sal.common.api.data.ReadFailedException
- if an exception occurs while reading from the datastore.public String getPortNameForInterface(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId nodeConnectorId, String interfaceName)
getPortNameForInterface
in interface IInterfaceManager
public String getPortNameForInterface(String dpnId, String interfaceName)
getPortNameForInterface
in interface IInterfaceManager
public Map<String,org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation> getTerminationPointCache()
getTerminationPointCache
in interface IInterfaceManager
public Map<String,org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus> getBfdStateCache()
getBfdStateCache
in interface IInterfaceManager
public void addTerminationPointForInterface(String interfaceName, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation terminationPoint)
public org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation getTerminationPoint(String interfaceName)
public void removeTerminationPointForInterface(String interfaceName)
public void addNodeIidForInterface(String interfaceName, org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeIid)
public void removeNodeIidForInterface(String interfaceName)
public org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> getNodeIidForInterface(String interfaceName)
public String getDpidForInterface(String interfaceName, org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeInstanceId)
public void addBridgeForNodeIid(org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeIid, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation bridge)
public void removeBridgeForNodeIid(org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeIid)
public org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation getBridgeForNodeIid(org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeIid)
public String getParentRefNameForInterface(String interfaceName)
getParentRefNameForInterface
in interface IInterfaceManager
public void updateInterfaceParentRef(String interfaceName, String parentInterface)
updateInterfaceParentRef
in interface IInterfaceManager
public void updateInterfaceParentRef(String interfaceName, String parentInterface, boolean readInterfaceBeforeWrite)
updateInterfaceParentRef
in interface IInterfaceManager
public org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation getTerminationPointForInterface(String interfaceName)
getTerminationPointForInterface
in interface IInterfaceManager
public org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation getOvsdbBridgeForInterface(String interfaceName)
getOvsdbBridgeForInterface
in interface IInterfaceManager
public org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation getOvsdbBridgeForNodeIid(org.opendaylight.yangtools.yang.binding.InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nodeIid)
getOvsdbBridgeForNodeIid
in interface IInterfaceManager
public List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation> getPortsOnBridge(BigInteger dpnId)
getPortsOnBridge
in interface IInterfaceManager
public List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation> getTunnelPortsOnBridge(BigInteger dpnId)
getTunnelPortsOnBridge
in interface IInterfaceManager
dpnId
- Datapath Node Identifierpublic Map<Class<? extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeBase>,List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation>> getPortsOnBridgeByType(BigInteger dpnId)
getPortsOnBridgeByType
in interface IInterfaceManager
dpnId
- Datapath Node Identifierpublic long getLogicalTunnelSelectGroupId(int lportTag)
getLogicalTunnelSelectGroupId
in interface IInterfaceManager
public boolean isItmDirectTunnelsEnabled()
isItmDirectTunnelsEnabled
in interface IInterfaceManager
Copyright © 2019 OpenDaylight. All rights reserved.