From 065192c9a7ec91fb761c228405f9d5f68a75ddc5 Mon Sep 17 00:00:00 2001 From: tron Date: Mon, 16 Mar 2015 19:19:58 +0000 Subject: Add patch from GIT repository to improve AMT protocol support. This stops "amtterm" from disconnecting repeatedly from the ME of a Lenovo ThinkServer TS140. --- sysutils/amtterm/Makefile | 11 +-- sysutils/amtterm/distinfo | 6 +- .../amtterm/patches/patch-RedirectionConstants.h | 40 +++++++++++ sysutils/amtterm/patches/patch-redir.c | 79 +++++++++++++++++++++- sysutils/amtterm/patches/patch-redir.h | 32 +++++++++ 5 files changed, 160 insertions(+), 8 deletions(-) create mode 100644 sysutils/amtterm/patches/patch-RedirectionConstants.h create mode 100644 sysutils/amtterm/patches/patch-redir.h (limited to 'sysutils') diff --git a/sysutils/amtterm/Makefile b/sysutils/amtterm/Makefile index 8e96589dfbe..37f37b4ed4b 100644 --- a/sysutils/amtterm/Makefile +++ b/sysutils/amtterm/Makefile @@ -1,8 +1,7 @@ -# $NetBSD: Makefile,v 1.20 2014/05/29 23:37:27 wiz Exp $ -# +# $NetBSD: Makefile,v 1.21 2015/03/16 19:19:58 tron Exp $ DISTNAME= amtterm-1.3 -PKGREVISION= 15 +PKGREVISION= 16 CATEGORIES= sysutils MASTER_SITES= http://www.kraxel.org/releases/amtterm/ @@ -13,7 +12,7 @@ LICENSE= gnu-gpl-v2 DEPENDS+= p5-SOAP-Lite-[0-9]*:../../net/p5-SOAP-Lite -USE_TOOLS+= gmake pkg-config perl:run +USE_TOOLS+= gmake pkg-config perl:run tr MAKE_FILE= GNUmakefile MAKE_FLAGS+= prefix=${PREFIX} @@ -22,4 +21,8 @@ REPLACE_PERL+= amttool .include "options.mk" +post-extract: + ${TR} -d '\r' <${WRKSRC}/RedirectionConstants.h >${WRKDIR}/no-dos + ${MV} ${WRKDIR}/no-dos ${WRKSRC}/RedirectionConstants.h + .include "../../mk/bsd.pkg.mk" diff --git a/sysutils/amtterm/distinfo b/sysutils/amtterm/distinfo index 1d65bcde30c..fcdf2da16ca 100644 --- a/sysutils/amtterm/distinfo +++ b/sysutils/amtterm/distinfo @@ -1,8 +1,10 @@ -$NetBSD: distinfo,v 1.3 2013/08/22 07:12:37 wiz Exp $ +$NetBSD: distinfo,v 1.4 2015/03/16 19:19:58 tron Exp $ SHA1 (amtterm-1.3.tar.gz) = cfd199cc870f48a59caa89408b039239eab85322 RMD160 (amtterm-1.3.tar.gz) = 382f9869b849f7cf6180b68f2a2481225ca575af Size (amtterm-1.3.tar.gz) = 37671 bytes SHA1 (patch-GNUmakefile) = f0ff91d80b01ea9d4b42ea752b786ce16a698c7d +SHA1 (patch-RedirectionConstants.h) = 8124cf1f580d75f9b60ca6c34d576146b6d4e7fd SHA1 (patch-mk_Variables.mk) = cb2d2fae3c0e650386308bd9290fa62c64a137f7 -SHA1 (patch-redir.c) = 862935d9e74a9df791eb5b22baf0cc1ac4b7ffb6 +SHA1 (patch-redir.c) = 930b9623d75e843a28708bbeb9c50e64332681e0 +SHA1 (patch-redir.h) = d910de3c4efd118b8d001cf17673c47857c72a3a diff --git a/sysutils/amtterm/patches/patch-RedirectionConstants.h b/sysutils/amtterm/patches/patch-RedirectionConstants.h new file mode 100644 index 00000000000..b028c0880a5 --- /dev/null +++ b/sysutils/amtterm/patches/patch-RedirectionConstants.h @@ -0,0 +1,40 @@ +$NetBSD: patch-RedirectionConstants.h,v 1.1 2015/03/16 19:19:58 tron Exp $ + +Decode SOL_CONTROLS_FROM_HOST messages. This fixes compatiblity problems +with the AMT interface of an Lenovo ThinkServer TS140. + +Patch taken from GIT repository: + +https://www.kraxel.org/cgit/amtterm/patch/?id=0ece5135fef56dbd0d94957c334655a57adb7212 + +--- RedirectionConstants.h.orig 2011-05-26 10:19:45.000000000 +0100 ++++ RedirectionConstants.h 2015-03-16 18:55:44.000000000 +0000 +@@ -24,6 +24,8 @@ + #define SOL_KEEP_ALIVE_PING 0x24 //Console to Host + #define SOL_KEEP_ALIVE_PONG 0x25 //Host to Console + #define SOL_DATA_TO_HOST 0x28 //Console to host ++#define SOL_CONTROLS_FROM_HOST 0x29 //Host to Console ++ + #define SOL_DATA_FROM_HOST 0x2A //Host to Console + #define SOL_HEARTBEAT 0x2B + +@@ -33,6 +35,19 @@ + #define END_SOL_REDIRECTION_LENGTH 8 + #define END_SOL_REDIRECTION_REPLY_LENGTH 8 + ++// Control message control bits (message 0x29) ++#define RTS_CONTROL 1 ++#define DTR_CONTROL 2 ++#define BREAK_CONTROL 4 ++ ++// Control message status bits (message 0x29) ++#define TX_OVERFLOW 1 ++#define LOOPBACK_ACTIVE 2 ++#define SYSTEM_POWER_STATE 4 ++#define RX_FLUSH_TIMEOUT 8 ++#define TESTMODE_ACTIVE 16 ++ ++ + //IDER Messages Formats + #define START_IDER_REDIRECTION 0x40 + #define START_IDER_REDIRECTION_REPLY 0x41 diff --git a/sysutils/amtterm/patches/patch-redir.c b/sysutils/amtterm/patches/patch-redir.c index dac368a0ffb..6c7e153594c 100644 --- a/sysutils/amtterm/patches/patch-redir.c +++ b/sysutils/amtterm/patches/patch-redir.c @@ -1,5 +1,14 @@ ---- redir.c.orig 2011-05-26 18:19:45.000000000 +0900 -+++ redir.c 2012-08-07 13:08:49.000000000 +0900 +$NetBSD: patch-redir.c,v 1.2 2015/03/16 19:19:58 tron Exp $ + +Decode SOL_CONTROLS_FROM_HOST messages. This fixes compatiblity problems +with the AMT interface of an Lenovo ThinkServer TS140. + +Patch taken from GIT repository: + +https://www.kraxel.org/cgit/amtterm/patch/?id=0ece5135fef56dbd0d94957c334655a57adb7212 + +--- redir.c.orig 2011-05-26 10:19:45.000000000 +0100 ++++ redir.c 2015-03-16 19:16:49.000000000 +0000 @@ -281,8 +281,11 @@ switch (count) { @@ -14,3 +23,69 @@ case 0: snprintf(r->err, sizeof(r->err), "EOF from socket"); return -1; +@@ -298,6 +301,9 @@ + return bshift; + } + ++static int in_loopback_mode = 0; ++static int powered_off = 0; ++ + int redir_data(struct redir *r) + { + int rc, bshift; +@@ -382,6 +388,55 @@ + goto again; + redir_stop(r); + break; ++ case SOL_CONTROLS_FROM_HOST: { ++ bshift = r->blen; /* FIXME */ ++ if (r->blen < bshift) ++ goto again; ++ ++ /* Host sends this message to the Management Console when ++ * the host has changed its COM port control lines. This ++ * message is likely to be one of the first messages that ++ * the Host sends to the Console after it starts SOL ++ * redirection. ++ */ ++ struct controls_from_host_message *msg = (struct controls_from_host_message *) r->buf; ++ //printf("Type %x, control %d, status %d\n", msg->type, msg->control, msg->status); ++ if (msg->status & LOOPBACK_ACTIVE) { ++ if (r->verbose) ++ fprintf (stderr, "Warning, SOL device is running in loopback mode. Text input may not be accepted\n"); ++ in_loopback_mode = 1; ++ } else if (in_loopback_mode) { ++ if (r->verbose) ++ fprintf (stderr, "SOL device is no longer running in loopback mode\n"); ++ in_loopback_mode = 0; ++ } ++ ++ if (0 == (msg->status & SYSTEM_POWER_STATE)) { ++ if (r->verbose) ++ fprintf (stderr, "The system is powered off.\n"); ++ powered_off = 1; ++ } else if (powered_off) { ++ if (r->verbose) ++ fprintf (stderr, "The system is powered on.\n"); ++ powered_off = 0; ++ } ++ ++ if (r->verbose) { ++ if (msg->status & (TX_OVERFLOW|RX_FLUSH_TIMEOUT|TESTMODE_ACTIVE)) ++ fprintf (stderr, "Other unhandled status condition\n"); ++ ++ if (msg->control & RTS_CONTROL) ++ fprintf (stderr, "RTS is asserted on the COM Port\n"); ++ ++ if (msg->control & DTR_CONTROL) ++ fprintf (stderr, "DTR is asserted on the COM Port\n"); ++ ++ if (msg->control & BREAK_CONTROL) ++ fprintf (stderr, "BREAK is asserted on the COM Port\n"); ++ } ++ ++ break; ++ } + default: + snprintf(r->err, sizeof(r->err), "%s: unknown r->buf 0x%02x", + __FUNCTION__, r->buf[0]); diff --git a/sysutils/amtterm/patches/patch-redir.h b/sysutils/amtterm/patches/patch-redir.h new file mode 100644 index 00000000000..63b70d303d1 --- /dev/null +++ b/sysutils/amtterm/patches/patch-redir.h @@ -0,0 +1,32 @@ +$NetBSD: patch-redir.h,v 1.1 2015/03/16 19:19:58 tron Exp $ + +Decode SOL_CONTROLS_FROM_HOST messages. This fixes compatiblity problems +with the AMT interface of an Lenovo ThinkServer TS140. + +Patch taken from GIT repository: + +https://www.kraxel.org/cgit/amtterm/patch/?id=0ece5135fef56dbd0d94957c334655a57adb7212 + +--- redir.h.orig 2011-05-26 10:19:45.000000000 +0100 ++++ redir.h 2015-03-16 18:55:44.000000000 +0000 +@@ -1,4 +1,5 @@ + #include "RedirectionConstants.h" ++#include + + enum redir_state { + REDIR_NONE = 0, +@@ -38,6 +39,14 @@ + int (*cb_recv)(void *cb_data, unsigned char *buf, int len); + }; + ++struct __attribute__ ((__packed__)) controls_from_host_message { ++ unsigned char type; // 0x29 ++ unsigned char reserved[3]; ++ uint32_t host_sequence_number; ++ unsigned char control; ++ unsigned char status; ++}; ++ + const char *redir_state_name(enum redir_state state); + const char *redir_state_desc(enum redir_state state); + -- cgit v1.2.3