Annotation of embedtools/src/updimg.c, revision 1.1.2.6
1.1.2.1 misho 1: #include "global.h"
1.1.2.2 misho 2: #include "upd.h"
1.1.2.6 ! misho 3: #include "tftp.h"
1.1.2.1 misho 4:
5:
6: sl_config cfg;
7: int Verbose, Mode;
8: extern char compiled[], compiledby[], compilehost[];
9:
10:
11: static void Usage()
12: {
13: printf( " Update Image tool for embedded systems on CompactFlash\n"
14: "=== %s === %s@%s ===\n\n"
15: " Syntax: updimg [-v] <modes> <image_name> [operate_dir]\n\n"
16: "\t-v\t\tVerbose ...\n\n"
1.1.2.6 ! misho 17: "\t-D\t\tRun tftp server and watch for updates (image_name==ip:port)\n"
1.1.2.1 misho 18: "\t-a\t\tMake image active for next boot\n"
1.1.2.4 misho 19: "\t-i <tftp_dir>\tInstall new image\n"
1.1.2.1 misho 20: "\t-r\t\tRollback old backuped image\n"
1.1.2.3 misho 21: "\t-t <tftp_dir>\tExport for TFTP download\n"
1.1.2.1 misho 22: "\t-b\t\tBackup image\n"
23: "\t-d\t\tClean backuped image\n"
24: "\n", compiled, compiledby, compilehost);
25: }
26:
27: // -----------------------------------
28:
29: int main(int argc, char **argv)
30: {
1.1.2.6 ! misho 31: char ch, *pos, szImg[MAXPATHLEN], szTFTP[MAXPATHLEN];
1.1.2.1 misho 32: int mode;
1.1.2.6 ! misho 33: struct hostent *host;
! 34: struct sockaddr_in sin;
1.1.2.1 misho 35:
1.1.2.6 ! misho 36: while ((ch = getopt(argc, argv, "hvdbt:ai:rD")) != -1)
1.1.2.1 misho 37: switch (ch) {
1.1.2.6 ! misho 38: case 'D':
! 39: Mode |= 0x40;
! 40: break;
1.1.2.1 misho 41: case 'a':
42: Mode |= 0x1;
43: break;
44: case 't':
45: Mode |= 0x8;
1.1.2.3 misho 46: strlcpy(szTFTP, optarg, MAXPATHLEN);
1.1.2.1 misho 47: break;
48: case 'r':
1.1.2.4 misho 49: if (Mode & 0x10) {
1.1.2.1 misho 50: printf("Error:: can`t set rollback mode because find set install ...\n");
51: return 1;
52: } else
1.1.2.4 misho 53: Mode |= 0x20;
1.1.2.1 misho 54: break;
55: case 'i':
1.1.2.4 misho 56: if (Mode & 0x20) {
1.1.2.1 misho 57: printf("Error:: can`t set install mode because find set rollback ...\n");
58: return 1;
59: } else
1.1.2.4 misho 60: Mode |= 0x10;
61: strlcpy(szTFTP, optarg, MAXPATHLEN);
1.1.2.1 misho 62: break;
63: case 'b':
1.1.2.4 misho 64: if (Mode & 0x4) {
1.1.2.1 misho 65: printf("Error:: can`t set backup mode because find set clean ...\n");
66: return 1;
67: } else
1.1.2.4 misho 68: Mode |= 0x2;
1.1.2.1 misho 69: break;
70: case 'd':
1.1.2.4 misho 71: if (Mode & 0x2) {
1.1.2.1 misho 72: printf("Error:: can`t set clean mode because find set backup ...\n");
73: return 1;
74: } else
1.1.2.4 misho 75: Mode |= 0x4;
1.1.2.1 misho 76: break;
77: case 'v':
78: Verbose++;
79: break;
80: case 'h':
81: default:
82: Usage();
83: return 1;
84: }
85: argc -= optind;
86: argv += optind;
87: if (!Mode) {
88: printf("Error:: Mode not specified !!!\n\n");
89: Usage();
90: return 1;
91: }
92: if (!argc) {
93: printf("Error:: Image filename not specified !!!\n\n");
94: Usage();
95: return 1;
96: } else
1.1.2.2 misho 97: basename_r(*argv, szImg);
1.1.2.6 ! misho 98: if (0x40 & Mode) {
! 99: if (0x40 != Mode) {
! 100: printf("Error:: Daemon mode can`t be specified with others ...\n");
! 101: return 1;
! 102: }
! 103:
! 104: pos = strchr(szImg, ':');
! 105: if (!pos)
! 106: sin.sin_port = htons(DEFAULT_TFTP);
! 107: else {
! 108: *pos++ = 0;
! 109: sin.sin_port = htons(atoi(pos));
! 110: if (!sin.sin_port)
! 111: sin.sin_port = htons(DEFAULT_TFTP);
! 112: }
! 113: host = gethostbyname(szImg);
! 114: if (!host) {
! 115: printf("Error:: in resolv host %s #%d - %s\n", szImg, h_errno, hstrerror(h_errno));
! 116: return 1;
! 117: } else
! 118: memcpy(&sin.sin_addr.s_addr, host->h_addr, host->h_length);
! 119:
! 120: strlcpy(szTFTP, !argv[1] ? DEFAULT_TFTPDIR : argv[1], MAXPATHLEN);
1.1.2.2 misho 121: chdir(argv[1]);
1.1.2.6 ! misho 122: VERB(2) printf("Info(2):: Host %s Port %d in Dir %s\n",
! 123: inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), szTFTP);
! 124: } else
! 125: if (argc > 1) {
! 126: chdir(argv[1]);
! 127: VERB(5) printf("Info(5):: Change to dir %s\n", argv[1]);
! 128: }
1.1.2.1 misho 129:
130: openlog("updimg", LOG_CONS, 0);
1.1.2.2 misho 131:
1.1.2.6 ! misho 132: for (mode = 0x40; mode; mode >>= 1)
1.1.2.1 misho 133: switch (Mode & mode) {
134: case 0x1:
1.1.2.2 misho 135: Activate(szImg);
1.1.2.1 misho 136: break;
137: case 0x2:
1.1.2.5 misho 138: Backup(szImg);
1.1.2.1 misho 139: break;
140: case 0x4:
1.1.2.4 misho 141: Clean(szImg);
1.1.2.1 misho 142: break;
143: case 0x8:
1.1.2.3 misho 144: tFTP(szImg, szTFTP);
1.1.2.1 misho 145: break;
146: case 0x10:
1.1.2.4 misho 147: Install(szImg, szTFTP);
1.1.2.1 misho 148: break;
149: case 0x20:
1.1.2.4 misho 150: Rollback(szImg);
1.1.2.1 misho 151: break;
1.1.2.6 ! misho 152: case 0x40:
! 153: Daemonize(sin, szTFTP);
! 154: break;
1.1.2.1 misho 155: }
156:
157: closelog();
158: return 0;
159: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>