/*
 * Copyright (C) 2007 Michael Brown <mbrown@fensystems.co.uk>.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

FILE_LICENCE ( GPL2_OR_LATER );

#include <stdint.h>
#include <byteswap.h>
#include <gpxe/netdevice.h>
#include <gpxe/iobuf.h>
#include <gpxe/if_ether.h>
#include <gpxe/rarp.h>

/** @file
 *
 * Reverse Address Resolution Protocol
 *
 */

/**
 * Process incoming ARP packets
 *
 * @v iobuf		I/O buffer
 * @v netdev		Network device
 * @v ll_source		Link-layer source address
 * @ret rc		Return status code
 *
 * This is a dummy method which simply discards RARP packets.
 */
static int rarp_rx ( struct io_buffer *iobuf,
		     struct net_device *netdev __unused,
		     const void *ll_source __unused ) {
	free_iob ( iobuf );
	return 0;
}


/**
 * Transcribe RARP address
 *
 * @v net_addr	RARP address
 * @ret string	"<RARP>"
 *
 * This operation is meaningless for the RARP protocol.
 */
static const char * rarp_ntoa ( const void *net_addr __unused ) {
	return "<RARP>";
}

/** RARP protocol */
struct net_protocol rarp_protocol __net_protocol = {
	.name = "RARP",
	.net_proto = htons ( ETH_P_RARP ),
	.rx = rarp_rx,
	.ntoa = rarp_ntoa,
};
