Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof

源代码在线查看: align.cc

软件大小: 3515 K
上传用户: l2335800
关键词: compile install modular toolkit
下载地址: 免注册下载 普通下载 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()				{				}								Align::~Align()				{				}								int				Align::configure(Vector &conf, ErrorHandler *errh)				{				  unsigned modulus;				  if (cp_va_kparse(conf, this, errh,						   "MODULUS", cpkP+cpkM, cpUnsigned, &modulus,						   "OFFSET", cpkP+cpkM, cpUnsigned, &_offset,						   cpEnd) < 0)				    return -1;				  if (modulus != 2 && modulus != 4 && modulus != 8)				    return errh->error("align modulus must be 2, 4, or 8");				  if (_offset >= (int)modulus)				    return errh->error("align offset must be smaller than modulus");				  _mask = modulus - 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)							

相关资源