Commit f3546deb079fd9e069870b9fd2f22bb48d5c8254
Committed by
Anthony Liguori
1 parent
2ad82cf9
slirp: Rework monitor commands for host forwarding
Improve the monitor interface for adding and removing host forwarding rules by splitting it up in two commands and rename them to hostfwd_add and hostfwd_remove. Also split up the paths taken for legacy -redir support and the monitor add command as the latter will be extended later on. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
4 changed files
with
29 additions
and
22 deletions
net.c
| ... | ... | @@ -871,7 +871,7 @@ static int net_slirp_init(Monitor *mon, VLANState *vlan, const char *model, |
| 871 | 871 | return 0; |
| 872 | 872 | } |
| 873 | 873 | |
| 874 | -static void net_slirp_hostfwd_remove(Monitor *mon, const char *port_str) | |
| 874 | +void net_slirp_hostfwd_remove(Monitor *mon, const char *port_str) | |
| 875 | 875 | { |
| 876 | 876 | int host_port; |
| 877 | 877 | char buf[256] = ""; |
| ... | ... | @@ -879,8 +879,10 @@ static void net_slirp_hostfwd_remove(Monitor *mon, const char *port_str) |
| 879 | 879 | int is_udp = 0; |
| 880 | 880 | int n; |
| 881 | 881 | |
| 882 | - if (!mon) | |
| 882 | + if (!slirp_inited) { | |
| 883 | + monitor_printf(mon, "user mode network stack not in use\n"); | |
| 883 | 884 | return; |
| 885 | + } | |
| 884 | 886 | |
| 885 | 887 | if (!port_str || !port_str[0]) |
| 886 | 888 | goto fail_syntax; |
| ... | ... | @@ -958,29 +960,30 @@ static void slirp_hostfwd(Monitor *mon, const char *redir_str) |
| 958 | 960 | config_error(mon, "invalid host forwarding rule '%s'\n", redir_str); |
| 959 | 961 | } |
| 960 | 962 | |
| 961 | -void net_slirp_redir(Monitor *mon, const char *redir_str, const char *redir_opt2) | |
| 963 | +void net_slirp_hostfwd_add(Monitor *mon, const char *redir_str) | |
| 962 | 964 | { |
| 963 | - struct slirp_config_str *config; | |
| 964 | - | |
| 965 | 965 | if (!slirp_inited) { |
| 966 | - if (mon) { | |
| 967 | - monitor_printf(mon, "user mode network stack not in use\n"); | |
| 968 | - } else { | |
| 969 | - config = qemu_malloc(sizeof(*config)); | |
| 970 | - pstrcpy(config->str, sizeof(config->str), redir_str); | |
| 971 | - config->flags = SLIRP_CFG_HOSTFWD; | |
| 972 | - config->next = slirp_configs; | |
| 973 | - slirp_configs = config; | |
| 974 | - } | |
| 966 | + monitor_printf(mon, "user mode network stack not in use\n"); | |
| 975 | 967 | return; |
| 976 | 968 | } |
| 977 | 969 | |
| 978 | - if (!strcmp(redir_str, "remove")) { | |
| 979 | - net_slirp_hostfwd_remove(mon, redir_opt2); | |
| 970 | + slirp_hostfwd(mon, redir_str); | |
| 971 | +} | |
| 972 | + | |
| 973 | +void net_slirp_redir(const char *redir_str) | |
| 974 | +{ | |
| 975 | + struct slirp_config_str *config; | |
| 976 | + | |
| 977 | + if (!slirp_inited) { | |
| 978 | + config = qemu_malloc(sizeof(*config)); | |
| 979 | + pstrcpy(config->str, sizeof(config->str), redir_str); | |
| 980 | + config->flags = SLIRP_CFG_HOSTFWD; | |
| 981 | + config->next = slirp_configs; | |
| 982 | + slirp_configs = config; | |
| 980 | 983 | return; |
| 981 | 984 | } |
| 982 | 985 | |
| 983 | - slirp_hostfwd(mon, redir_str); | |
| 986 | + slirp_hostfwd(NULL, redir_str); | |
| 984 | 987 | } |
| 985 | 988 | |
| 986 | 989 | #ifndef _WIN32 | ... | ... |
net.h
| ... | ... | @@ -132,7 +132,9 @@ int net_client_init(Monitor *mon, const char *device, const char *p); |
| 132 | 132 | void net_client_uninit(NICInfo *nd); |
| 133 | 133 | int net_client_parse(const char *str); |
| 134 | 134 | void net_slirp_smb(const char *exported_dir); |
| 135 | -void net_slirp_redir(Monitor *mon, const char *redir_str, const char *redir_opt2); | |
| 135 | +void net_slirp_hostfwd_add(Monitor *mon, const char *redir_str); | |
| 136 | +void net_slirp_hostfwd_remove(Monitor *mon, const char *port_str); | |
| 137 | +void net_slirp_redir(const char *redir_str); | |
| 136 | 138 | void net_cleanup(void); |
| 137 | 139 | int slirp_is_inited(void); |
| 138 | 140 | void net_client_check(void); | ... | ... |
qemu-monitor.hx
| ... | ... | @@ -536,9 +536,11 @@ Remove host VLAN client. |
| 536 | 536 | ETEXI |
| 537 | 537 | |
| 538 | 538 | #ifdef CONFIG_SLIRP |
| 539 | - { "host_net_redir", "ss?", net_slirp_redir, | |
| 540 | - "[tcp|udp]:host-port:[guest-host]:guest-port", "redirect TCP or UDP connections from host to guest (requires -net user)\n" | |
| 541 | - "host_net_redir remove [tcp:|udp:]host-port -- remove redirection" }, | |
| 539 | + { "hostfwd_add", "s", net_slirp_hostfwd_add, | |
| 540 | + "[tcp|udp]:hostport:[guestaddr]:guestport", | |
| 541 | + "redirect TCP or UDP connections from host to guest (requires -net user)" }, | |
| 542 | + { "hostfwd_remove", "s", net_slirp_hostfwd_remove, | |
| 543 | + "[tcp|udp]:hostport", "remove host-to-guest TCP or UDP redirection" }, | |
| 542 | 544 | #endif |
| 543 | 545 | STEXI |
| 544 | 546 | @item host_net_redir | ... | ... |
vl.c