Add @var{directory} to the file/script search path.
@end deffn
+@deffn Command bindto [name]
+Specify address by name on which to listen for incoming TCP/IP connections.
+By default, OpenOCD will listen on all available interfaces.
+@end deffn
+
@anchor{targetstatehandling}
@section Target State handling
@cindex reset
#include <signal.h>
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+
#ifndef _WIN32
#include <netinet/tcp.h>
#endif
/* set the polling period to 100ms */
static int polling_period = 100;
+/* address by name on which to listen for incoming TCP/IP connections */
+static char *bindto_name;
+
static int add_connection(struct service *service, struct command_context *cmd_ctx)
{
socklen_t address_size;
void *priv)
{
struct service *c, **p;
+ struct hostent *hp;
int so_reuseaddr_option = 1;
c = malloc(sizeof(struct service));
memset(&c->sin, 0, sizeof(c->sin));
c->sin.sin_family = AF_INET;
- c->sin.sin_addr.s_addr = INADDR_ANY;
+
+ if (bindto_name == NULL)
+ c->sin.sin_addr.s_addr = INADDR_ANY;
+ else {
+ hp = gethostbyname(bindto_name);
+ if (hp == NULL) {
+ LOG_ERROR("couldn't resolve bindto address: %s", bindto_name);
+ exit(-1);
+ }
+ memcpy(&c->sin.sin_addr, hp->h_addr_list[0], hp->h_length);
+ }
c->sin.sin_port = htons(c->portnumber);
if (bind(c->fd, (struct sockaddr *)&c->sin, sizeof(c->sin)) == -1) {
- LOG_ERROR("couldn't bind to socket: %s", strerror(errno));
+ LOG_ERROR("couldn't bind %s to socket: %s", name, strerror(errno));
exit(-1);
}
return ERROR_OK;
}
+COMMAND_HANDLER(handle_bindto_command)
+{
+ switch (CMD_ARGC) {
+ case 0:
+ command_print(CMD_CTX, "bindto name: %s", bindto_name);
+ break;
+ case 1:
+ free(bindto_name);
+ bindto_name = strdup(CMD_ARGV[0]);
+ break;
+ default:
+ return ERROR_COMMAND_SYNTAX_ERROR;
+ }
+ return ERROR_OK;
+}
+
static const struct command_registration server_command_handlers[] = {
{
.name = "shutdown",
.usage = "",
.help = "set the servers polling period",
},
+ {
+ .name = "bindto",
+ .handler = &handle_bindto_command,
+ .mode = COMMAND_ANY,
+ .usage = "[name]",
+ .help = "Specify address by name on which to listen for "
+ "incoming TCP/IP connections",
+ },
COMMAND_REGISTRATION_DONE
};