COPE the first practical network coding scheme which is developped on click

源代码在线查看: align.cc

软件大小: 3707 K
上传用户: delsboy
关键词: developped practical network coding
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*				 * align.{cc,hh} -- element aligns passing packets				 * Eddie Kohler				 *				 * Copyright (c) 1999-2000 Massachusetts Institute of Technology				 *				 * Permission is hereby granted, free of charge, to any person obtaining a				 * copy of this software and associated documentation files (the "Software"),				 * to deal in the Software without restriction, subject to the conditions				 * listed in the Click LICENSE file. These conditions include: you must				 * preserve this copyright notice, and you cannot mention the copyright				 * holders in advertising related to the Software without their permission.				 * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This				 * notice is a summary of the Click LICENSE file; the license in that file is				 * legally binding.				 */								#include 				#include "align.hh"				#include 				#include 				#include 				CLICK_DECLS								Align::Align()				  : Element(1, 1)				{				}								Align::~Align()				{				}								int				Align::configure(Vector &conf, ErrorHandler *errh)				{				  unsigned count;				  if (cp_va_parse(conf, this, errh,						  cpUnsigned, "alignment modulus", &count,						  cpUnsigned, "alignment offset", &_offset,						  cpEnd) < 0)				    return -1;				  if (count != 2 && count != 4 && count != 8)				    return errh->error("align modulus must be 2, 4, or 8");				  if (_offset >= (int)count)				    return errh->error("align offset must be smaller than modulus");				  _mask = count - 1;				  return 0;				}								Packet *				Align::smaction(Packet *p)				{				  int delta = _offset - (reinterpret_cast(p->data()) & _mask);				  if (delta == 0)				    return p;				  if (delta < 0)				    delta += _mask + 1;				  return p->shift_data(delta);				}								void				Align::push(int, Packet *p)				{				  output(0).push(smaction(p));				}								Packet *				Align::pull(int)				{				  Packet *p = input(0).pull();				  return (p ? smaction(p) : 0);				}								CLICK_ENDDECLS				EXPORT_ELEMENT(Align)				ELEMENT_MT_SAFE(Align)							

相关资源