@SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public List<NetInterface<? extends NetInterfaceAddress>> getNetworkInterfaces() 
		throws KuraException
	{
		IPAddress            netAddress = null; 
		NetInterfaceAddressImpl  addressImpl = null;
		List<NetInterfaceAddress>  addresses = null;
		List<NetInterface<? extends NetInterfaceAddress>> interfaces = new ArrayList<NetInterface<? extends NetInterfaceAddress>>();
		
		EthernetInterfaceImpl    ethInterface = null;
		java.net.NetworkInterface jnInterface = null;
		List<java.net.InterfaceAddress> jnInterfaceAddresses = null;
		Enumeration<java.net.NetworkInterface> jnInterfaces  = null;		
		try {
			jnInterfaces = java.net.NetworkInterface.getNetworkInterfaces();
			while (jnInterfaces.hasMoreElements()) {
				
				jnInterface  = jnInterfaces.nextElement();
				ethInterface = new EthernetInterfaceImpl(jnInterface.getName());				
				ethInterface.setVirtual(jnInterface.isVirtual());
				ethInterface.setState(NetInterfaceState.ACTIVATED);
				ethInterface.setAutoConnect(true);

				byte[]  hwAddr = null;
				boolean   isUp = false;
				boolean isLoop = false;
				int        mtu = 0;
				boolean  isP2p = false;
				boolean  multi = false;
				try {  
					hwAddr = jnInterface.getHardwareAddress();
					isUp   = jnInterface.isUp();
					isLoop = jnInterface.isLoopback();
					mtu    = jnInterface.getMTU();
					isP2p  = jnInterface.isPointToPoint();
					multi  = jnInterface.supportsMulticast();
				} catch (Exception e) {
					s_logger.warn("Exception while getting information for interface "+jnInterface.getName()+": "+e.getMessage());
				}
				ethInterface.setHardwareAddress(hwAddr);
				ethInterface.setLinkUp(isUp);
				ethInterface.setLoopback(isLoop);
				ethInterface.setMTU(mtu);
				ethInterface.setPointToPoint(isP2p);
				ethInterface.setSupportsMulticast(multi);
				ethInterface.setUp(isUp);
				
				addresses = new ArrayList<NetInterfaceAddress>();
				jnInterfaceAddresses = jnInterface.getInterfaceAddresses();
				for (java.net.InterfaceAddress jnInterfaceAddress : jnInterfaceAddresses) {
					
					netAddress  = IPAddress.getByAddress(jnInterfaceAddress.getAddress().getAddress());
					addressImpl = new NetInterfaceAddressImpl();
					addressImpl.setAddress(netAddress);
					if (jnInterfaceAddress.getBroadcast() != null) {
						addressImpl.setBroadcast( IPAddress.getByAddress(jnInterfaceAddress.getBroadcast().getAddress()));
					}
					addressImpl.setNetworkPrefixLength(jnInterfaceAddress.getNetworkPrefixLength());
					
					addresses.add(addressImpl);
				}
				ethInterface.setNetInterfaceAddresses(addresses);				
				interfaces.add(ethInterface);				
			}
		}
		catch (Exception e) {
			throw new KuraException(KuraErrorCode.INTERNAL_ERROR, e);
		}			
		return interfaces;
	}