diff options
Diffstat (limited to 'util/iseltime.c')
-rw-r--r-- | util/iseltime.c | 55 |
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(<ime2); printf("Current System time: "); show_time(ltime2,1); |