Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / arp.h
diff --git a/qemu/roms/ipxe/src/include/ipxe/arp.h b/qemu/roms/ipxe/src/include/ipxe/arp.h
new file mode 100644 (file)
index 0000000..e30ae6b
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef _IPXE_ARP_H
+#define _IPXE_ARP_H
+
+/** @file
+ *
+ * Address Resolution Protocol
+ *
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER );
+
+#include <ipxe/tables.h>
+#include <ipxe/netdevice.h>
+#include <ipxe/neighbour.h>
+
+/** A network-layer protocol that relies upon ARP */
+struct arp_net_protocol {
+       /** Network-layer protocol */
+       struct net_protocol *net_protocol;
+       /** Check existence of address
+        *
+        * @v netdev    Network device
+        * @v net_addr  Network-layer address
+        * @ret rc      Return status code
+        */
+       int ( * check ) ( struct net_device *netdev,
+                         const void *net_addr );
+};
+
+/** ARP protocol table */
+#define ARP_NET_PROTOCOLS \
+       __table ( struct arp_net_protocol, "arp_net_protocols" )
+
+/** Declare an ARP protocol */
+#define __arp_net_protocol __table_entry ( ARP_NET_PROTOCOLS, 01 )
+
+extern struct net_protocol arp_protocol __net_protocol;
+extern struct neighbour_discovery arp_discovery;
+
+/**
+ * Transmit packet, determining link-layer address via ARP
+ *
+ * @v iobuf            I/O buffer
+ * @v netdev           Network device
+ * @v net_protocol     Network-layer protocol
+ * @v net_dest         Destination network-layer address
+ * @v net_source       Source network-layer address
+ * @v ll_source                Source link-layer address
+ * @ret rc             Return status code
+ */
+static inline int arp_tx ( struct io_buffer *iobuf, struct net_device *netdev,
+                          struct net_protocol *net_protocol,
+                          const void *net_dest, const void *net_source,
+                          const void *ll_source ) {
+
+       return neighbour_tx ( iobuf, netdev, net_protocol, net_dest,
+                             &arp_discovery, net_source, ll_source );
+}
+
+#endif /* _IPXE_ARP_H */