示例#1
0
TEST(peer_list, peer_list_general)
{
  nodetool::peerlist_manager plm;
  plm.init(false);
#define ADD_GRAY_NODE(ip_, port_, id_, last_seen_) {  nodetool::peerlist_entry ple; ple.last_seen=last_seen_;ple.adr.ip = ip_; ple.adr.port = port_; ple.id = id_;plm.append_with_peer_gray(ple);}  
#define ADD_WHITE_NODE(ip_, port_, id_, last_seen_) {  nodetool::peerlist_entry ple;ple.last_seen=last_seen_; ple.adr.ip = ip_; ple.adr.port = port_; ple.id = id_;plm.append_with_peer_white(ple);}  

#define PRINT_HEAD(step) {std::list<nodetool::peerlist_entry> bs_head; bool r = plm.get_peerlist_head(bs_head, 100);std::cout << "step " << step << ": " << bs_head.size() << std::endl;}

  ADD_GRAY_NODE(MAKE_IP(123,43,12,1), 8080, 121241, 34345);
  ADD_GRAY_NODE(MAKE_IP(123,43,12,2), 8080, 121241, 34345);
  ADD_GRAY_NODE(MAKE_IP(123,43,12,3), 8080, 121241, 34345);
  ADD_GRAY_NODE(MAKE_IP(123,43,12,4), 8080, 121241, 34345);
  ADD_GRAY_NODE(MAKE_IP(123,43,12,5), 8080, 121241, 34345);

  ADD_WHITE_NODE(MAKE_IP(123,43,12,1), 8080, 121241, 34345);
  ADD_WHITE_NODE(MAKE_IP(123,43,12,2), 8080, 121241, 34345);
  ADD_WHITE_NODE(MAKE_IP(123,43,12,3), 8080, 121241, 34345);
  ADD_WHITE_NODE(MAKE_IP(123,43,12,4), 8080, 121241, 34345);

  size_t gray_list_size = plm.get_gray_peers_count();
  ASSERT_EQ(gray_list_size, 1);

  std::list<nodetool::peerlist_entry> bs_head;
  bool r = plm.get_peerlist_head(bs_head, 100);
  std::cout << bs_head.size() << std::endl;
  ASSERT_TRUE(r);

  ASSERT_EQ(bs_head.size(), 4);


  ADD_GRAY_NODE(MAKE_IP(123,43,12,5), 8080, 121241, 34345);
  ASSERT_EQ(plm.get_gray_peers_count(), 1);
  ASSERT_EQ(plm.get_white_peers_count(), 4);
}
示例#2
0
文件: arp.c 项目: weiweishuo/papaya
#include<linux/byteorder/generic.h>
#include<utils.h>
#include<linux/skbuff.h>
#include<linux/ip.h>

extern void waiting_for_transmit(struct sk_buff *skb);

/* For those sk_buffs who are waiting the ARP layer to resolve their target 
 * MAC address. The Arp layer will try updating the 'IP-MAC' table by sending 
 * an ARP package to net-cable. And then, will re-process these strayed children
 * Note! @later_down must share a same length with @arptbl. some code relies on 
 * that.
 */
static struct sk_buff **later_down;
static u8 __mac_broadcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
u32 __local_ip = MAKE_IP(192, 168, 0, 9);	/*TODO one for each nic */
struct arp_record{
	u32 his_ip;
	char his_mac[6];
	struct arp_record *prev, *next;
};
#define ARP_TBL_LEN 256
static struct arp_record **arptbl;

void arp_init(void){
	later_down = kmalloc2( 4 * ARP_TBL_LEN, __GFP_ZERO);
	arptbl = kmalloc2 (4 * ARP_TBL_LEN, __GFP_ZERO);
}

/* 只是做最简单的初始化,这样arp_inquire和arp_respond里面的代码会有重复,先
 * 不做进一步的提炼。 因为对ARP的所有类型还没学,慢慢进化。