summaryrefslogtreecommitdiff
path: root/util/iseltime.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/iseltime.c')
-rw-r--r--util/iseltime.c55
1 files changed, 47 insertions, 8 deletions
diff --git a/util/iseltime.c b/util/iseltime.c
index ba0013d..3aa9f27 100644
--- a/util/iseltime.c
+++ b/util/iseltime.c
@@ -6,6 +6,7 @@
* 05/11/09 Andy Cress v1.0 - created
* 07/23/10 Andy Cress v1.1 - always show System time also
* 08/20/10 Andy Cress v1.2 - show/set RTC time also if Linux
+ * 03/16/17 Andy Cress 3.03 - show/set UTC offset also
*/
/*M*
Copyright (c) 2013, Andy Cress
@@ -72,16 +73,45 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define GET_SELTIME 0x48
#define SET_SELTIME 0x49
+#define GET_SELUTC 0x5C
+#define SET_SELUTC 0x5D
/*
* Global variables
*/
-static char * progver = "3.02";
+static char * progver = "3.03";
static char * progname = "iseltime";
static char fdebug = 0;
static char fset = 0;
static uchar ipmi_maj = 0;
static uchar ipmi_min = 0;
+static int get_sel_utc(uchar *rdata, int rlen)
+{
+ uchar idata[4];
+ uchar ccode;
+ int ret;
+ ret = ipmi_cmdraw(GET_SELUTC, NETFN_STOR, BMC_SA, PUBLIC_BUS, BMC_LUN,
+ idata, 0, rdata, &rlen, &ccode, fdebug);
+ if (ret == 0 && ccode != 0) ret = ccode;
+ return(ret);
+} /*end get_sel_utc()*/
+
+static int set_sel_utc(short offset)
+{
+ uchar idata[4];
+ uchar rdata[16];
+ int rlen = 8;
+ int ret;
+ uchar ccode;
+
+ idata[0] = (uchar)(offset & 0x00ff);
+ idata[1] = (uchar)((offset >> 8) & 0x00ff);
+ ret = ipmi_cmdraw(SET_SELUTC, NETFN_STOR, BMC_SA, PUBLIC_BUS, BMC_LUN,
+ idata, 2, rdata, &rlen, &ccode, fdebug);
+ if (ret == 0 && ccode != 0) ret = ccode;
+ return(ret);
+} /*end set_sel_utc()*/
+
static int get_sel_time(uchar *rdata, int rlen)
{
uchar idata[4];
@@ -142,15 +172,15 @@ time_t utc2local(time_t t)
void show_time(time_t etime, int doutc)
{
char buf[TIMESTR_SZ];
- int bufsz = TIMESTR_SZ;
+ int bufsz = TIMESTR_SZ;
time_t t;
- strcpy(buf,"00/00/00 00:00:00");
+ strcpy(buf,"00/00/00 00:00:00");
if (doutc) t = utc2local(etime);
else t = etime;
- strftime(buf,bufsz, "%x %H:%M:%S", gmtime(&t)); /*or "%x %T"*/
+ strftime(buf,bufsz, "%x %H:%M:%S", gmtime(&t)); /*or "%x %T"*/
printf("%s\n",buf);
- return;
+ return;
}
#ifdef METACOMMAND
@@ -168,6 +198,7 @@ main(int argc, char **argv)
uchar devrec[20];
uchar timebuf[4];
time_t ltime1, ltime2, ltime3;
+ short offset;
int c;
#if defined (EFI)
@@ -214,11 +245,19 @@ main(int argc, char **argv)
#endif
}
+ offset = 0;
+ rv = get_sel_utc((uchar *)&offset,2);
+ if (fdebug) printf("get_sel_utc: ret=%x offset=%d\n",rv,offset);
+ if (rv == 0) {
+ /* TODO: get system UTC offset */
+ rv = set_sel_utc(offset);
+ printf("set_sel_utc(%d): ret=%x\n",offset,rv);
+ }
rv = get_sel_time(&timebuf[0],4);
if (rv != 0) {
- printf("get_sel_time error: ret = %x\n",rv);
- ipmi_close_();
- exit(1);
+ printf("get_sel_time error: ret = %x\n",rv);
+ ipmi_close_();
+ exit(1);
}
time(&ltime2);
printf("Current System time: "); show_time(ltime2,1);