Commit f3546deb079fd9e069870b9fd2f22bb48d5c8254

Authored by Jan Kiszka
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>
... ... @@ -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
... ...
... ... @@ -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
... ...
... ... @@ -5319,7 +5319,7 @@ int main(int argc, char **argv, char **envp)
5319 5319 break;
5320 5320 #endif
5321 5321 case QEMU_OPTION_redir:
5322   - net_slirp_redir(NULL, optarg, NULL);
  5322 + net_slirp_redir(optarg);
5323 5323 break;
5324 5324 #endif
5325 5325 case QEMU_OPTION_bt:
... ...