Add SOCK_PARAMS to patty_client_setsockopt()
Add SOCK_PARAMS to patty_client_setsockopt() to allow for setting (presently) the MTU and TX window of a given socket to accommodate the needs of specific remote stations
This commit is contained in:
		
							parent
							
								
									4d47b62f5f
								
							
						
					
					
						commit
						eb071de230
					
				
					 4 changed files with 36 additions and 0 deletions
				
			
		|  | @ -64,6 +64,7 @@ enum patty_ax25_sock_flow { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| enum patty_ax25_sock_opt { | enum patty_ax25_sock_opt { | ||||||
|  |     PATTY_AX25_SOCK_PARAMS, | ||||||
|     PATTY_AX25_SOCK_IF |     PATTY_AX25_SOCK_IF | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -127,6 +128,10 @@ void patty_ax25_sock_init(patty_ax25_sock *sock); | ||||||
| 
 | 
 | ||||||
| void patty_ax25_sock_reset(patty_ax25_sock *sock); | void patty_ax25_sock_reset(patty_ax25_sock *sock); | ||||||
| 
 | 
 | ||||||
|  | void patty_ax25_sock_mtu_set(patty_ax25_sock *sock, size_t mtu); | ||||||
|  | 
 | ||||||
|  | void patty_ax25_sock_window_set(patty_ax25_sock *sock, size_t window); | ||||||
|  | 
 | ||||||
| void patty_ax25_sock_params_upgrade(patty_ax25_sock *sock); | void patty_ax25_sock_params_upgrade(patty_ax25_sock *sock); | ||||||
| 
 | 
 | ||||||
| void patty_ax25_sock_params_max(patty_ax25_sock *sock); | void patty_ax25_sock_params_max(patty_ax25_sock *sock); | ||||||
|  |  | ||||||
|  | @ -56,6 +56,11 @@ typedef struct _patty_client_setsockopt_request { | ||||||
|     size_t len; |     size_t len; | ||||||
| } patty_client_setsockopt_request; | } patty_client_setsockopt_request; | ||||||
| 
 | 
 | ||||||
|  | typedef struct _patty_client_setsockopt_params { | ||||||
|  |     size_t mtu, | ||||||
|  |            window; | ||||||
|  | } patty_client_setsockopt_params; | ||||||
|  | 
 | ||||||
| typedef struct _patty_client_setsockopt_if { | typedef struct _patty_client_setsockopt_if { | ||||||
|     char name[8]; |     char name[8]; | ||||||
|     int status; |     int status; | ||||||
|  |  | ||||||
							
								
								
									
										18
									
								
								src/server.c
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								src/server.c
									
										
									
									
									
								
							|  | @ -590,6 +590,23 @@ static int server_setsockopt(patty_ax25_server *server, | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     switch (request.opt) { |     switch (request.opt) { | ||||||
|  |         case PATTY_AX25_SOCK_PARAMS: { | ||||||
|  |             patty_client_setsockopt_params data; | ||||||
|  | 
 | ||||||
|  |             if (read(client, &data, request.len) < 0) { | ||||||
|  |                 goto error_read; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (data.mtu)    patty_ax25_sock_mtu_set(sock,    data.mtu); | ||||||
|  |             if (data.window) patty_ax25_sock_window_set(sock, data.window); | ||||||
|  | 
 | ||||||
|  |             if (patty_ax25_sock_realloc_bufs(sock) < 0) { | ||||||
|  |                 goto error_realloc_bufs; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         case PATTY_AX25_SOCK_IF: { |         case PATTY_AX25_SOCK_IF: { | ||||||
|             patty_client_setsockopt_if data; |             patty_client_setsockopt_if data; | ||||||
|             patty_ax25_if *iface; |             patty_ax25_if *iface; | ||||||
|  | @ -639,6 +656,7 @@ error_invalid_type: | ||||||
| error_invalid_opt: | error_invalid_opt: | ||||||
|     return write(client, &response, sizeof(response)); |     return write(client, &response, sizeof(response)); | ||||||
| 
 | 
 | ||||||
|  | error_realloc_bufs: | ||||||
| error_read: | error_read: | ||||||
|     return -1; |     return -1; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -227,6 +227,14 @@ void patty_ax25_sock_reset(patty_ax25_sock *sock) { | ||||||
|     patty_timer_clear(&sock->timer_t3); |     patty_timer_clear(&sock->timer_t3); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void patty_ax25_sock_mtu_set(patty_ax25_sock *sock, size_t mtu) { | ||||||
|  |     sock->n_maxlen_tx = mtu; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void patty_ax25_sock_window_set(patty_ax25_sock *sock, size_t window) { | ||||||
|  |     sock->n_window_tx = window; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void patty_ax25_sock_params_upgrade(patty_ax25_sock *sock) { | void patty_ax25_sock_params_upgrade(patty_ax25_sock *sock) { | ||||||
|     if (sock->version >= PATTY_AX25_2_2) { |     if (sock->version >= PATTY_AX25_2_2) { | ||||||
|         return; |         return; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue