The loopback device will allow access to various services like remote GDB
debugging, connecting to the terminal, etc., without letting external
agents like port scanners connect and disrupting the simulation.
Change-Id: I76dccbf152fa278ae9f342b25f7e345a1329fbe4
Reviewed-on: https://gem5-review.googlesource.com/3080
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
#include "base/misc.hh"
#include "base/types.hh"
#include "base/misc.hh"
#include "base/types.hh"
+#include "sim/byteswap.hh"
using namespace std;
bool ListenSocket::listeningDisabled = false;
bool ListenSocket::anyListening = false;
using namespace std;
bool ListenSocket::listeningDisabled = false;
bool ListenSocket::anyListening = false;
+bool ListenSocket::bindToLoopback = false;
+
void
ListenSocket::disableAll()
{
void
ListenSocket::disableAll()
{
return listeningDisabled;
}
return listeningDisabled;
}
+void
+ListenSocket::loopbackOnly()
+{
+ if (anyListening)
+ panic("Too late to bind to loopback, already have a listener");
+ bindToLoopback = true;
+}
+
////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////
//
//
struct sockaddr_in sockaddr;
sockaddr.sin_family = PF_INET;
struct sockaddr_in sockaddr;
sockaddr.sin_family = PF_INET;
- sockaddr.sin_addr.s_addr = INADDR_ANY;
+ sockaddr.sin_addr.s_addr =
+ htobe<unsigned long>(bindToLoopback ? INADDR_LOOPBACK : INADDR_ANY);
sockaddr.sin_port = htons(port);
// finally clear sin_zero
memset(&sockaddr.sin_zero, 0, sizeof(sockaddr.sin_zero));
sockaddr.sin_port = htons(port);
// finally clear sin_zero
memset(&sockaddr.sin_zero, 0, sizeof(sockaddr.sin_zero));
static bool listeningDisabled;
static bool anyListening;
static bool listeningDisabled;
static bool anyListening;
+ static bool bindToLoopback;
+
public:
static void disableAll();
static bool allDisabled();
public:
static void disableAll();
static bool allDisabled();
+ static void loopbackOnly();
+
protected:
bool listening;
int fd;
protected:
bool listening;
int fd;