Esempio n. 1
0
/*
 * ApplyDataHdr adds a data header to a data buffer
 *
 * Params:
 * channel is the channel to which the data belongs
 * commbuff is the buffer with the data to be sent
 * mux is the MUX object the data is to be transmitted through
 */
void ApplyDataHdr(int8 channel, COMMBUFF **commbuff, MUX *mux)
{
	CHANNEL *chanlPtr;
	DATA_PACKET_HDR packetdatahdr;
	int16 length;
	COMMBUFF *cb = *commbuff;

	DEBUG("ApplyDataHdr(%lu, %p, %p)\n", (int32) channel, commbuff,
	      mux);

	length = (int16) commbuff_length(cb);
	convert_word(length);

	chanlPtr = mux->channels[channel];

	packetdatahdr.type = PACKETTYPE_DATA_HDR;
	packetdatahdr.channel = channel;
	packetdatahdr.len = length;

	commbuff_add_header(cb, &packetdatahdr, sizeof(DATA_PACKET_HDR));
	*commbuff = cb;

	chanlPtr->qed_totl_amount += sizeof(DATA_PACKET_HDR);
	mux->total_queued_amount += sizeof(DATA_PACKET_HDR);
}
Esempio n. 2
0
void tag_commbuff(COMMBUFF *commbuff, int32 channel, void *param,
		  void (*release) (int32, int32, void*))
{
	INTERRUPT_STATE state;
	COMMBUFFTAG *newtag;
	int32 index;

	index = GET_COMMBUFF_TAG_INDEX(commbuff);

	newtag = (COMMBUFFTAG *) int_alloc_mem(sizeof(COMMBUFFTAG));

	newtag->channel = channel;
	newtag->commbuff = commbuff;
	newtag->param = param;
	newtag->size = commbuff_length(commbuff);
	newtag->CommBuffRelease = release;

	commbuff->destructor = &FreeCommBuffData;

	disable_interrupts(state);

	newtag->next_tag = commbuff_tags[index];
	commbuff_tags[index] = newtag;

	enable_interrupts(state);
}
Esempio n. 3
0
/*
 * Log protocol messages
 *
 * Params:
 * cb is the commbuff to be logged
 */
void log_packettype(COMMBUFF *cb)
{

	int32 length = 0;
	int8 *data;
	int32 msgid = 0;

	if (!cb)
		return;

	data = commbuff_data(cb);
	length = commbuff_length(cb);

	switch (data[0]) {
	case PACKETTYPE_INVALID:
		msgid = NETMUX_PACKET_INVALID;
		break;
	case PACKETTYPE_DATA_HDR:
		msgid = NETMUX_PACKET_DATA;
		break;
	case PACKETTYPE_CREDIT:
		msgid = NETMUX_PACKET_CREDIT;
		break;
	case PACKETTYPE_ENABLEMUX:
		msgid = NETMUX_PACKET_ENABLEMUX;
		break;
	case PACKETTYPE_DISABLEMUX:
		msgid = NETMUX_PACKET_DISABLEMUX;
		break;
	case PACKETTYPE_ENABLECHANNEL:
		msgid = NETMUX_PACKET_ENABLECHANNEL;
		break;
	case PACKETTYPE_DISABLECHANNEL:
		msgid = NETMUX_PACKET_DISABLECHANNEL;
		break;
	case PACKETTYPE_QUERYINTERFACE:
		msgid = NETMUX_PACKET_QUERYINTERFACE;
		break;
	case PACKETTYPE_CHANNELSIGNAL:
		msgid = NETMUX_PACKET_CHANNELSIGNAL;
		break;
	default:
		return;
	};

	LOGCOMMBUFF_PROTO(netmux_log_port_handle, msgid, length, cb);
}