Fix new nmrp code
This commit is contained in:
		
							parent
							
								
									0227c935ca
								
							
						
					
					
						commit
						a59358a6c1
					
				
					 1 changed files with 10 additions and 6 deletions
				
			
		
							
								
								
									
										16
									
								
								nmrp.c
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								nmrp.c
									
										
									
									
									
								
							|  | @ -178,7 +178,7 @@ static inline void msg_init(struct nmrp_msg *msg, uint16_t code) | ||||||
| 
 | 
 | ||||||
| static char *msg_mkopt(struct nmrp_msg *msg, char *p, uint16_t type, const void *val, size_t len) | static char *msg_mkopt(struct nmrp_msg *msg, char *p, uint16_t type, const void *val, size_t len) | ||||||
| { | { | ||||||
| 	struct nmrp_opt* opt = (struct nmrp_opt*)(p ? p : msg->opts); | 	struct nmrp_opt* opt = (struct nmrp_opt*)p; | ||||||
| 
 | 
 | ||||||
| 	len &= 0xffff; | 	len &= 0xffff; | ||||||
| 
 | 
 | ||||||
|  | @ -191,7 +191,10 @@ static char *msg_mkopt(struct nmrp_msg *msg, char *p, uint16_t type, const void | ||||||
| 
 | 
 | ||||||
| 	opt->type = htons(type); | 	opt->type = htons(type); | ||||||
| 	opt->len = NMRP_OPT_HDR_LEN + len; | 	opt->len = NMRP_OPT_HDR_LEN + len; | ||||||
| 	memcpy(opt->val, val, len); | 
 | ||||||
|  | 	if (val) { | ||||||
|  | 		memcpy(opt->val, val, len); | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	msg->len += opt->len; | 	msg->len += opt->len; | ||||||
| 	p += opt->len; | 	p += opt->len; | ||||||
|  | @ -220,7 +223,8 @@ static void msg_mkconfack(struct nmrp_msg *msg, uint32_t ipaddr, uint32_t ipmask | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	msg_init(msg, NMRP_C_CONF_ACK); | 	msg_init(msg, NMRP_C_CONF_ACK); | ||||||
| 	p = msg_mkopt(msg, NULL, NMRP_O_DEV_IP, &ip, 8); | 	p = msg_mkopt(msg, msg->opts, NMRP_O_DEV_IP, &ip, 8); | ||||||
|  | 	p = msg_mkopt(msg, p, NMRP_O_FW_UP, NULL, 0); | ||||||
| 
 | 
 | ||||||
| #ifdef NMRPFLASH_SET_REGION | #ifdef NMRPFLASH_SET_REGION | ||||||
| 	if (region) { | 	if (region) { | ||||||
|  | @ -272,8 +276,8 @@ static int pkt_recv(struct ethsock *sock, struct nmrp_pkt *pkt) | ||||||
| 
 | 
 | ||||||
| 	len = ntohs(pkt->msg.len) + sizeof(pkt->eh); | 	len = ntohs(pkt->msg.len) + sizeof(pkt->eh); | ||||||
| 
 | 
 | ||||||
| 	if (bytes < len) { | 	if (bytes != len) { | ||||||
| 		fprintf(stderr, "Short packet (expected %d, got %d).\n", | 		fprintf(stderr, "Unexpected packet length (expected %d, got %d).\n", | ||||||
| 				(int)len, (int)bytes); | 				(int)len, (int)bytes); | ||||||
| 		return 1; | 		return 1; | ||||||
| 	} | 	} | ||||||
|  | @ -511,7 +515,7 @@ int nmrp_do(struct nmrpd_args *args) | ||||||
| 	while (!g_interrupted) { | 	while (!g_interrupted) { | ||||||
| 		if (expect != NMRP_C_NONE && rx.msg.code != expect) { | 		if (expect != NMRP_C_NONE && rx.msg.code != expect) { | ||||||
| 			fprintf(stderr, "Received %s while waiting for %s!\n", | 			fprintf(stderr, "Received %s while waiting for %s!\n", | ||||||
| 					msg_code_str(ntohs(rx.msg.code)), msg_code_str(expect)); | 					msg_code_str(rx.msg.code), msg_code_str(expect)); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		msg_init(&tx.msg, NMRP_C_NONE); | 		msg_init(&tx.msg, NMRP_C_NONE); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue