msg: Drop msg->tlv_count.
The field is redundant with the length tlv_list. Replace it with a function msg_tlv_count() instead. This iterates over the tlv_list. The computational overhead should be small, because the lists are very short and the tlv_count is only used in management paths (yet). Signed-off-by: Michael Walle <michael@walle.cc>
This commit is contained in:
		
							parent
							
								
									427f1b3981
								
							
						
					
					
						commit
						8f484e8312
					
				
							
								
								
									
										2
									
								
								clock.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								clock.c
									
									
									
									
									
								
							@ -1319,7 +1319,7 @@ int clock_manage(struct clock *c, struct port *p, struct ptp_message *msg)
 | 
			
		||||
	if (!cid_eq(tcid, &wildcard) && !cid_eq(tcid, &c->dds.clockIdentity)) {
 | 
			
		||||
		return changed;
 | 
			
		||||
	}
 | 
			
		||||
	if (msg->tlv_count != 1) {
 | 
			
		||||
	if (msg_tlv_count(msg) != 1) {
 | 
			
		||||
		return changed;
 | 
			
		||||
	}
 | 
			
		||||
	mgt = (struct management_tlv *) msg->management.suffix;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								msg.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								msg.c
									
									
									
									
									
								
							@ -318,7 +318,6 @@ struct ptp_message *msg_duplicate(struct ptp_message *msg, int cnt)
 | 
			
		||||
	memcpy(dup, msg, sizeof(*dup));
 | 
			
		||||
	dup->refcnt = 1;
 | 
			
		||||
	TAILQ_INIT(&dup->tlv_list);
 | 
			
		||||
	dup->tlv_count = 0;
 | 
			
		||||
 | 
			
		||||
	err = msg_post_recv(dup, cnt);
 | 
			
		||||
	if (err) {
 | 
			
		||||
@ -506,7 +505,19 @@ struct tlv_extra *msg_tlv_append(struct ptp_message *msg, int length)
 | 
			
		||||
void msg_tlv_attach(struct ptp_message *msg, struct tlv_extra *extra)
 | 
			
		||||
{
 | 
			
		||||
	TAILQ_INSERT_TAIL(&msg->tlv_list, extra, list);
 | 
			
		||||
	msg->tlv_count++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int msg_tlv_count(struct ptp_message *msg)
 | 
			
		||||
{
 | 
			
		||||
	int count = 0;
 | 
			
		||||
	struct tlv_extra *extra;
 | 
			
		||||
 | 
			
		||||
	for (extra = TAILQ_FIRST(&msg->tlv_list);
 | 
			
		||||
			extra != NULL;
 | 
			
		||||
			extra = TAILQ_NEXT(extra, list))
 | 
			
		||||
		count++;
 | 
			
		||||
 | 
			
		||||
	return count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *msg_type_string(int type)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								msg.h
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								msg.h
									
									
									
									
									
								
							@ -227,10 +227,6 @@ struct ptp_message {
 | 
			
		||||
	 * pointers to the appended TLVs.
 | 
			
		||||
	 */
 | 
			
		||||
	TAILQ_HEAD(tlv_list, tlv_extra) tlv_list;
 | 
			
		||||
	/**
 | 
			
		||||
	 * Contains the number of TLVs in the suffix.
 | 
			
		||||
	 */
 | 
			
		||||
	int tlv_count;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -279,6 +275,13 @@ struct tlv_extra *msg_tlv_append(struct ptp_message *msg, int length);
 | 
			
		||||
 */
 | 
			
		||||
void msg_tlv_attach(struct ptp_message *msg, struct tlv_extra *extra);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return the number of TLVs attached to a message.
 | 
			
		||||
 * @param msg  A message obtained using @ref msg_allocate().
 | 
			
		||||
 * @return     The number of attached TLVs.
 | 
			
		||||
 */
 | 
			
		||||
int msg_tlv_count(struct ptp_message *msg);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Obtain the transportSpecific field from a message.
 | 
			
		||||
 * @param m  Message to test.
 | 
			
		||||
 | 
			
		||||
@ -819,7 +819,7 @@ static int is_msg_mgt(struct ptp_message *msg)
 | 
			
		||||
		return 0;
 | 
			
		||||
	if (management_action(msg) != RESPONSE)
 | 
			
		||||
		return 0;
 | 
			
		||||
	if (msg->tlv_count != 1)
 | 
			
		||||
	if (msg_tlv_count(msg) != 1)
 | 
			
		||||
		return 0;
 | 
			
		||||
	tlv = (struct TLV *) msg->management.suffix;
 | 
			
		||||
	if (tlv->type == TLV_MANAGEMENT)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								pmc.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								pmc.c
									
									
									
									
									
								
							@ -80,7 +80,7 @@ static void pmc_show(struct ptp_message *msg, FILE *fp)
 | 
			
		||||
	fprintf(fp, "\t%s seq %hu %s ",
 | 
			
		||||
		pid2str(&msg->header.sourcePortIdentity),
 | 
			
		||||
		msg->header.sequenceId, pmc_action_string(action));
 | 
			
		||||
	if (msg->tlv_count != 1) {
 | 
			
		||||
	if (msg_tlv_count(msg) != 1) {
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
	extra = TAILQ_FIRST(&msg->tlv_list);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user