nbd: move socket wrappers to qemu-nbd
qemu-nbd is one of the few valid users of qerror_report_err. Move the error-reporting socket wrappers there. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									c06b72781d
								
							
						
					
					
						commit
						537b41f501
					
				| @ -62,10 +62,6 @@ enum { | ||||
| #define NBD_MAX_BUFFER_SIZE (32 * 1024 * 1024) | ||||
| 
 | ||||
| ssize_t nbd_wr_sync(int fd, void *buffer, size_t size, bool do_read); | ||||
| int tcp_socket_incoming(const char *address, uint16_t port); | ||||
| int unix_socket_outgoing(const char *path); | ||||
| int unix_socket_incoming(const char *path); | ||||
| 
 | ||||
| int nbd_receive_negotiate(int csock, const char *name, uint32_t *flags, | ||||
|                           off_t *size, size_t *blocksize); | ||||
| int nbd_init(int fd, int csock, uint32_t flags, off_t size, size_t blocksize); | ||||
|  | ||||
							
								
								
									
										50
									
								
								nbd.c
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								nbd.c
									
									
									
									
									
								
							| @ -188,56 +188,6 @@ static ssize_t write_sync(int fd, void *buffer, size_t size) | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| static void combine_addr(char *buf, size_t len, const char* address, | ||||
|                          uint16_t port) | ||||
| { | ||||
|     /* If the address-part contains a colon, it's an IPv6 IP so needs [] */ | ||||
|     if (strstr(address, ":")) { | ||||
|         snprintf(buf, len, "[%s]:%u", address, port); | ||||
|     } else { | ||||
|         snprintf(buf, len, "%s:%u", address, port); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| int tcp_socket_incoming(const char *address, uint16_t port) | ||||
| { | ||||
|     char address_and_port[128]; | ||||
|     Error *local_err = NULL; | ||||
| 
 | ||||
|     combine_addr(address_and_port, 128, address, port); | ||||
|     int fd = inet_listen(address_and_port, NULL, 0, SOCK_STREAM, 0, &local_err); | ||||
| 
 | ||||
|     if (local_err != NULL) { | ||||
|         qerror_report_err(local_err); | ||||
|         error_free(local_err); | ||||
|     } | ||||
|     return fd; | ||||
| } | ||||
| 
 | ||||
| int unix_socket_incoming(const char *path) | ||||
| { | ||||
|     Error *local_err = NULL; | ||||
|     int fd = unix_listen(path, NULL, 0, &local_err); | ||||
| 
 | ||||
|     if (local_err != NULL) { | ||||
|         qerror_report_err(local_err); | ||||
|         error_free(local_err); | ||||
|     } | ||||
|     return fd; | ||||
| } | ||||
| 
 | ||||
| int unix_socket_outgoing(const char *path) | ||||
| { | ||||
|     Error *local_err = NULL; | ||||
|     int fd = unix_connect(path, &local_err); | ||||
| 
 | ||||
|     if (local_err != NULL) { | ||||
|         qerror_report_err(local_err); | ||||
|         error_free(local_err); | ||||
|     } | ||||
|     return fd; | ||||
| } | ||||
| 
 | ||||
| /* Basic flow for negotiation
 | ||||
| 
 | ||||
|    Server         Client | ||||
|  | ||||
							
								
								
									
										52
									
								
								qemu-nbd.c
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								qemu-nbd.c
									
									
									
									
									
								
							| @ -20,6 +20,8 @@ | ||||
| #include "block/block.h" | ||||
| #include "block/nbd.h" | ||||
| #include "qemu/main-loop.h" | ||||
| #include "qemu/sockets.h" | ||||
| #include "qemu/error-report.h" | ||||
| #include "block/snapshot.h" | ||||
| 
 | ||||
| #include <stdarg.h> | ||||
| @ -201,6 +203,56 @@ static void termsig_handler(int signum) | ||||
|     qemu_notify_event(); | ||||
| } | ||||
| 
 | ||||
| static void combine_addr(char *buf, size_t len, const char* address, | ||||
|                          uint16_t port) | ||||
| { | ||||
|     /* If the address-part contains a colon, it's an IPv6 IP so needs [] */ | ||||
|     if (strstr(address, ":")) { | ||||
|         snprintf(buf, len, "[%s]:%u", address, port); | ||||
|     } else { | ||||
|         snprintf(buf, len, "%s:%u", address, port); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| static int tcp_socket_incoming(const char *address, uint16_t port) | ||||
| { | ||||
|     char address_and_port[128]; | ||||
|     Error *local_err = NULL; | ||||
| 
 | ||||
|     combine_addr(address_and_port, 128, address, port); | ||||
|     int fd = inet_listen(address_and_port, NULL, 0, SOCK_STREAM, 0, &local_err); | ||||
| 
 | ||||
|     if (local_err != NULL) { | ||||
|         qerror_report_err(local_err); | ||||
|         error_free(local_err); | ||||
|     } | ||||
|     return fd; | ||||
| } | ||||
| 
 | ||||
| static int unix_socket_incoming(const char *path) | ||||
| { | ||||
|     Error *local_err = NULL; | ||||
|     int fd = unix_listen(path, NULL, 0, &local_err); | ||||
| 
 | ||||
|     if (local_err != NULL) { | ||||
|         qerror_report_err(local_err); | ||||
|         error_free(local_err); | ||||
|     } | ||||
|     return fd; | ||||
| } | ||||
| 
 | ||||
| static int unix_socket_outgoing(const char *path) | ||||
| { | ||||
|     Error *local_err = NULL; | ||||
|     int fd = unix_connect(path, &local_err); | ||||
| 
 | ||||
|     if (local_err != NULL) { | ||||
|         qerror_report_err(local_err); | ||||
|         error_free(local_err); | ||||
|     } | ||||
|     return fd; | ||||
| } | ||||
| 
 | ||||
| static void *show_parts(void *arg) | ||||
| { | ||||
|     char *device = arg; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Paolo Bonzini
						Paolo Bonzini