|  | @@ -45,6 +45,15 @@
 | 
		
	
		
			
			| 45 | 45 |  
 | 
		
	
		
			
			| 46 | 46 |  FEATURE ( FEATURE_PROTOCOL, "TFTP", DHCP_EB_FEATURE_TFTP, 1 );
 | 
		
	
		
			
			| 47 | 47 |  
 | 
		
	
		
			
			|  | 48 | +/* TFTP-specific error codes */
 | 
		
	
		
			
			|  | 49 | +#define ETFTP_INVALID_BLKSIZE	EUNIQ_01
 | 
		
	
		
			
			|  | 50 | +#define ETFTP_INVALID_TSIZE	EUNIQ_02
 | 
		
	
		
			
			|  | 51 | +#define ETFTP_MC_NO_PORT	EUNIQ_03
 | 
		
	
		
			
			|  | 52 | +#define ETFTP_MC_NO_MC		EUNIQ_04
 | 
		
	
		
			
			|  | 53 | +#define ETFTP_MC_INVALID_MC	EUNIQ_05
 | 
		
	
		
			
			|  | 54 | +#define ETFTP_MC_INVALID_IP	EUNIQ_06
 | 
		
	
		
			
			|  | 55 | +#define ETFTP_MC_INVALID_PORT	EUNIQ_07
 | 
		
	
		
			
			|  | 56 | +
 | 
		
	
		
			
			| 48 | 57 |  /**
 | 
		
	
		
			
			| 49 | 58 |   * A TFTP request
 | 
		
	
		
			
			| 50 | 59 |   *
 | 
		
	
	
		
			
			|  | @@ -504,7 +513,7 @@ static int tftp_process_blksize ( struct tftp_request *tftp,
 | 
		
	
		
			
			| 504 | 513 |  	if ( *end ) {
 | 
		
	
		
			
			| 505 | 514 |  		DBGC ( tftp, "TFTP %p got invalid blksize \"%s\"\n",
 | 
		
	
		
			
			| 506 | 515 |  		       tftp, value );
 | 
		
	
		
			
			| 507 |  | -		return -EINVAL;
 | 
		
	
		
			
			|  | 516 | +		return -( EINVAL | ETFTP_INVALID_BLKSIZE );
 | 
		
	
		
			
			| 508 | 517 |  	}
 | 
		
	
		
			
			| 509 | 518 |  	DBGC ( tftp, "TFTP %p blksize=%d\n", tftp, tftp->blksize );
 | 
		
	
		
			
			| 510 | 519 |  
 | 
		
	
	
		
			
			|  | @@ -526,7 +535,7 @@ static int tftp_process_tsize ( struct tftp_request *tftp,
 | 
		
	
		
			
			| 526 | 535 |  	if ( *end ) {
 | 
		
	
		
			
			| 527 | 536 |  		DBGC ( tftp, "TFTP %p got invalid tsize \"%s\"\n",
 | 
		
	
		
			
			| 528 | 537 |  		       tftp, value );
 | 
		
	
		
			
			| 529 |  | -		return -EINVAL;
 | 
		
	
		
			
			|  | 538 | +		return -( EINVAL | ETFTP_INVALID_TSIZE );
 | 
		
	
		
			
			| 530 | 539 |  	}
 | 
		
	
		
			
			| 531 | 540 |  	DBGC ( tftp, "TFTP %p tsize=%ld\n", tftp, tftp->tsize );
 | 
		
	
		
			
			| 532 | 541 |  
 | 
		
	
	
		
			
			|  | @@ -560,13 +569,13 @@ static int tftp_process_multicast ( struct tftp_request *tftp,
 | 
		
	
		
			
			| 560 | 569 |  	port = strchr ( addr, ',' );
 | 
		
	
		
			
			| 561 | 570 |  	if ( ! port ) {
 | 
		
	
		
			
			| 562 | 571 |  		DBGC ( tftp, "TFTP %p multicast missing port,mc\n", tftp );
 | 
		
	
		
			
			| 563 |  | -		return -EINVAL;
 | 
		
	
		
			
			|  | 572 | +		return -( EINVAL | ETFTP_MC_NO_PORT );
 | 
		
	
		
			
			| 564 | 573 |  	}
 | 
		
	
		
			
			| 565 | 574 |  	*(port++) = '\0';
 | 
		
	
		
			
			| 566 | 575 |  	mc = strchr ( port, ',' );
 | 
		
	
		
			
			| 567 | 576 |  	if ( ! mc ) {
 | 
		
	
		
			
			| 568 | 577 |  		DBGC ( tftp, "TFTP %p multicast missing mc\n", tftp );
 | 
		
	
		
			
			| 569 |  | -		return -EINVAL;
 | 
		
	
		
			
			|  | 578 | +		return -( EINVAL | ETFTP_MC_NO_MC );
 | 
		
	
		
			
			| 570 | 579 |  	}
 | 
		
	
		
			
			| 571 | 580 |  	*(mc++) = '\0';
 | 
		
	
		
			
			| 572 | 581 |  
 | 
		
	
	
		
			
			|  | @@ -575,7 +584,7 @@ static int tftp_process_multicast ( struct tftp_request *tftp,
 | 
		
	
		
			
			| 575 | 584 |  		tftp->flags &= ~TFTP_FL_SEND_ACK;
 | 
		
	
		
			
			| 576 | 585 |  	if ( *mc_end ) {
 | 
		
	
		
			
			| 577 | 586 |  		DBGC ( tftp, "TFTP %p multicast invalid mc %s\n", tftp, mc );
 | 
		
	
		
			
			| 578 |  | -		return -EINVAL;
 | 
		
	
		
			
			|  | 587 | +		return -( EINVAL | ETFTP_MC_INVALID_MC );
 | 
		
	
		
			
			| 579 | 588 |  	}
 | 
		
	
		
			
			| 580 | 589 |  	DBGC ( tftp, "TFTP %p is%s the master client\n",
 | 
		
	
		
			
			| 581 | 590 |  	       tftp, ( ( tftp->flags & TFTP_FL_SEND_ACK ) ? "" : " not" ) );
 | 
		
	
	
		
			
			|  | @@ -584,7 +593,7 @@ static int tftp_process_multicast ( struct tftp_request *tftp,
 | 
		
	
		
			
			| 584 | 593 |  		if ( inet_aton ( addr, &socket.sin.sin_addr ) == 0 ) {
 | 
		
	
		
			
			| 585 | 594 |  			DBGC ( tftp, "TFTP %p multicast invalid IP address "
 | 
		
	
		
			
			| 586 | 595 |  			       "%s\n", tftp, addr );
 | 
		
	
		
			
			| 587 |  | -			return -EINVAL;
 | 
		
	
		
			
			|  | 596 | +			return -( EINVAL | ETFTP_MC_INVALID_IP );
 | 
		
	
		
			
			| 588 | 597 |  		}
 | 
		
	
		
			
			| 589 | 598 |  		DBGC ( tftp, "TFTP %p multicast IP address %s\n",
 | 
		
	
		
			
			| 590 | 599 |  		       tftp, inet_ntoa ( socket.sin.sin_addr ) );
 | 
		
	
	
		
			
			|  | @@ -592,7 +601,7 @@ static int tftp_process_multicast ( struct tftp_request *tftp,
 | 
		
	
		
			
			| 592 | 601 |  		if ( *port_end ) {
 | 
		
	
		
			
			| 593 | 602 |  			DBGC ( tftp, "TFTP %p multicast invalid port %s\n",
 | 
		
	
		
			
			| 594 | 603 |  			       tftp, port );
 | 
		
	
		
			
			| 595 |  | -			return -EINVAL;
 | 
		
	
		
			
			|  | 604 | +			return -( EINVAL | ETFTP_MC_INVALID_PORT );
 | 
		
	
		
			
			| 596 | 605 |  		}
 | 
		
	
		
			
			| 597 | 606 |  		DBGC ( tftp, "TFTP %p multicast port %d\n",
 | 
		
	
		
			
			| 598 | 607 |  		       tftp, ntohs ( socket.sin.sin_port ) );
 |