示例#1
0
文件: socket.c 项目: ido/openonload
void ci_sock_cmn_timestamp_q_enqueue(ci_netif* ni, ci_sock_cmn* s,
                                     ci_ip_pkt_fmt* pkt)
{
  ci_ip_pkt_queue* qu = &s->timestamp_q;
  oo_pkt_p prev_head = qu->head;

  /* This part is effectively ci_ip_queue_enqueue(ni, &s->timestamp_q, p);
   * but inlined to allow using tsq_next field 
   */
  pkt->tsq_next = OO_PP_NULL;
  if( ci_ip_queue_is_empty(qu) ) {
    ci_assert(OO_PP_IS_NULL(qu->head));
    qu->head = OO_PKT_P(pkt);
  }
  else {
    ci_assert(OO_PP_NOT_NULL(qu->head));
    /* This assumes the netif lock is held, so use
       ci_ip_queue_enqueue_nnl() if it's not */
    PKT(ni, qu->tail)->tsq_next = OO_PKT_P(pkt);
  }
  qu->tail = OO_PKT_P(pkt);
  qu->num++;


  if( OO_PP_IS_NULL(prev_head) ) {
    ci_assert(OO_PP_IS_NULL(s->timestamp_q_extract));
    s->timestamp_q_extract = qu->head;
  } 
  else {
    ci_sock_cmn_timestamp_q_reap(ni, s);
  }

  /* Tells post-poll loop to put socket on the [reap_list]. */
  s->b.sb_flags |= CI_SB_FLAG_RX_DELIVERED;
}
示例#2
0
static int
ath_get_totstat(struct statfoo *sf, int s, char b[], size_t bs)
{
	struct athaggrstatfoo_p *wf = (struct athaggrstatfoo_p *) sf;
#define	STAT(x) \
	snprintf(b, bs, "%u", wf->total.aggr_##x); return 1
#define	PKT(x) \
	snprintf(b, bs, "%u", wf->total.aggr_pkts[x]); return 1

	switch (s) {
	case S_SINGLE_PKT:		STAT(single_pkt);
	case S_NONBAW_PKT:		STAT(nonbaw_pkt);
	case S_AGGR_PKT:		STAT(aggr_pkt);
	case S_BAW_CLOSED_SINGLE_PKT:	STAT(baw_closed_single_pkt);
	case S_LOW_HWQ_SINGLE_PKT:	STAT(low_hwq_single_pkt);
	case S_SCHED_NOPKT:		STAT(sched_nopkt);
	case S_RTS_AGGR_LIMITED:	STAT(rts_aggr_limited);
	case S_PKT0:			PKT(0);
	case S_PKT1:			PKT(1);
	case S_PKT2:			PKT(2);
	case S_PKT3:			PKT(3);
	case S_PKT4:			PKT(4);
	case S_PKT5:			PKT(5);
	case S_PKT6:			PKT(6);
	case S_PKT7:			PKT(7);
	case S_PKT8:			PKT(8);
	case S_PKT9:			PKT(9);
	case S_PKT10:			PKT(10);
	case S_PKT11:			PKT(11);
	case S_PKT12:			PKT(12);
	case S_PKT13:			PKT(13);
	case S_PKT14:			PKT(14);
	case S_PKT15:			PKT(15);
	case S_PKT16:			PKT(16);
	case S_PKT17:			PKT(17);
	case S_PKT18:			PKT(18);
	case S_PKT19:			PKT(19);
	case S_PKT20:			PKT(20);
	case S_PKT21:			PKT(21);
	case S_PKT22:			PKT(22);
	case S_PKT23:			PKT(23);
	case S_PKT24:			PKT(24);
	case S_PKT25:			PKT(25);
	case S_PKT26:			PKT(26);
	case S_PKT27:			PKT(27);
	case S_PKT28:			PKT(28);
	case S_PKT29:			PKT(29);
	case S_PKT30:			PKT(30);
	case S_PKT31:			PKT(31);
	}
	b[0] = '\0';
	return 0;
#undef PKT
#undef STAT
}