A
download EthernetNetworkInterface.java
Language: Java
LOC: 55
Project Info
Teaseme Java Virtual Machine(teaseme)
Server: SourceForge
Type: cvs
...sspath\jos\system\net\jeps\
   ARP.java
   ARPPacket.java
   ARPTableEntry.java
   DatagramPacket.java
   DatagramSocket.java
   DummyNetworkInterface.java
   EtherHostDriver.java
   ...etNetworkInterface.java
   EtherPacket.java
   HWAddr.java
   ICMP.java
   ICMPPacket.java
   IllegalRouteException.java
   InetAddress.java
   IP.java
   IPAddr.java
   IPPacket.java
   Main.java
   ...medPacketException.java
   NetworkInterface.java
   NetworkInterfaceCard.java
   NoRouteException.java
   Packet.java
   Protocol.java
   QuoteServerThread.java
   RoutingTableEntry.java
   StackPanic.java
   TCP.java
   UDP.java
   UDPPacket.java
   UDPQueue.java

package jos.system.net.jeps;

/*
 *  Generic Ethernet Interface
 */

class EthernetNetworkInterface extends NetworkInterface
{

  private ARP arp;
  private NetworkInterfaceCard driver;
  HWAddr hwaddr;

  EthernetNetworkInterface(NetworkInterfaceCard drvr)
  {
    super();
    driver = drvr;
    hasARP = true;		// Ethernet uses ARP
    blocking= true;
    if (!init()) {System.out.println("Not inited!");}
    hwaddr=driver.getHWAddr();
    arp = new ARP(this,hwaddr);		
    addProtocol(arp);
  }

  public boolean init()       
  {
    /* Inits the driver */
    if (driver.init() != 0) {return false;}
    else {return true;}
  } 
  
  public Packet readPacket()
  /*
   * Read Ethernet frame and "unpack" it. Used by super.demux()
   */  
  {
    EtherPacket ep = driver.read();
    Packet p=ep.unpack(ep.HEADER_LEN);
    return p;
  }

  void writePacket(Packet p,HWAddr src, HWAddr dest, int protocol)
  {
    if ((p==null) || (src==null) || (dest==null)) 
      { System.out.println("Null pointer?!?!?! in ENI.writePacket");
//        return;
	}
    if (dest==null) {
      System.out.println("Dest invalid");
      }
    if (src==null) {
      System.out.println("Src invalid");
      }
    EtherPacket ep=new EtherPacket(p.pack(14));
    ep.setSrcDestProt(src,dest,protocol);  
      
/*----------- Test, parse your own packet. Close this comment to activate. *
    try
    {
    EtherPacket eep= new EtherPacket(ep.data);
    System.out.println(">>>"+eep.toString());
    if (eep.protocol==0x800) 
    {
      IPPacket ipp=new IPPacket(eep.unpack(eep.HEADER_LEN));
      System.out.println(">>>"+ipp.toString());
      if (ipp.protocol==0x1)
      {
        ICMPPacket icmpp=new ICMPPacket(ipp.unpack(ipp.HEADER_LEN));
        System.out.println(">>>"+icmpp.toString());
      }
      else if (ipp.protocol==0x11)
      {
        UDPPacket udpp=new UDPPacket(ipp.unpack(ipp.HEADER_LEN));
        System.out.println(">>>"+udpp.toString());
      }
    }
    else if (eep.protocol==0x806)
    {
      ARPPacket arpp=new ARPPacket(eep.unpack(eep.HEADER_LEN).data);
      System.out.println(">>>"+arpp.toString());
    }
    }
    catch (MalformedPacketException e)
    {
        System.out.println("Packet was ****ed up.");
    }
/*---------------  End of testing ---------------------------------        */
    driver.write(ep);
  }  

  void writeIPPacket(IPAddr dest,IPPacket ipp)
  {
    System.out.println("+++"+ipp.toString());
    HWAddr hwdest = arp.getHWAddr(dest);
    if (hwdest!=null)
    {
      writePacket(ipp,hwaddr,arp.getHWAddr(dest),0x800);
      return;
    }
    // Send ARP Request and drop packet. SHOULD NOT be done (RFC 1122)
    // It's inefficient but accepted behaviour.
    arp.request(dest);
  }
}

About Koders | Resources | Downloads | Support | Black Duck | Terms of Service | DMCA | Privacy Policy | Contact Us