Gabe Black has uploaded this change for review. (
https://gem5-review.googlesource.com/3080
Change subject: base: Teach the socket listeners how to bind to the
loopback.
......................................................................
base: Teach the socket listeners how to bind to the loopback.
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
---
M src/base/socket.cc
M src/base/socket.hh
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/base/socket.cc b/src/base/socket.cc
index 7a44437..f51e8f1 100644
--- a/src/base/socket.cc
+++ b/src/base/socket.cc
@@ -40,12 +40,15 @@
#include "base/misc.hh"
#include "base/types.hh"
+#include "sim/byteswap.hh"
using namespace std;
bool ListenSocket::listeningDisabled = false;
bool ListenSocket::anyListening = false;
+bool ListenSocket::bindToLoopback = false;
+
void
ListenSocket::disableAll()
{
@@ -60,6 +63,14 @@
return listeningDisabled;
}
+void
+ListenSocket::loopbackOnly()
+{
+ if (anyListening)
+ panic("Too late to bind to loopback, already have a listener");
+ bindToLoopback = true;
+}
+
////////////////////////////////////////////////////////////////////////
//
//
@@ -94,7 +105,8 @@
struct sockaddr_in sockaddr;
sockaddr.sin_family = PF_INET;
- sockaddr.sin_addr.s_addr = INADDR_ANY;
+ sockaddr.sin_addr.s_addr = bindToLoopback ? INADDR_LOOPBACK :
INADDR_ANY;
+ sockaddr.sin_addr.s_addr = htobe(sockaddr.sin_addr.s_addr);
sockaddr.sin_port = htons(port);
// finally clear sin_zero
memset(&sockaddr.sin_zero, 0, sizeof(sockaddr.sin_zero));
diff --git a/src/base/socket.hh b/src/base/socket.hh
index 942318e..fab7f75 100644
--- a/src/base/socket.hh
+++ b/src/base/socket.hh
@@ -37,10 +37,14 @@
static bool listeningDisabled;
static bool anyListening;
+ static bool bindToLoopback;
+
public:
static void disableAll();
static bool allDisabled();
+ static void loopbackOnly();
+
protected:
bool listening;
int fd;
--
To view, visit https://gem5-review.googlesource.com/3080
To unsubscribe, visit https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I76dccbf152fa278ae9f342b25f7e345a1329fbe4
Gerrit-Change-Number: 3080
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <[email protected]>
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev