mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-18 14:23:55 +00:00
MFC
This commit is contained in:
commit
8c4431d022
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/projects/largeSMP/; revision=222197
|
@ -75,7 +75,7 @@ DEVIATIONS
|
|||
2) Since the behavior of `u' (undo) within a `g' (global) command list is
|
||||
not specified by POSIX, it follows the behavior of the SunOS ed:
|
||||
undo forces a global command list to be executed only once, rather than
|
||||
for each line matching a global pattern. In addtion, each instance of
|
||||
for each line matching a global pattern. In addition, each instance of
|
||||
`u' within a global command undoes all previous commands (including
|
||||
undo's) in the command list. This seems the best way, since the
|
||||
alternatives are either too complicated to implement or too confusing
|
||||
|
@ -83,7 +83,7 @@ DEVIATIONS
|
|||
|
||||
The global/undo combination is useful for masking errors that
|
||||
would otherwise cause a script to fail. For instance, an ed script
|
||||
to remove any occurences of either `censor1' or `censor2' might be
|
||||
to remove any occurrences of either `censor1' or `censor2' might be
|
||||
written as:
|
||||
ed - file <<EOF
|
||||
1g/.*/u\
|
||||
|
|
|
@ -204,7 +204,7 @@ ar_open(const char *name)
|
|||
/*
|
||||
* set default blksz on read. APPNDs writes rdblksz on the last volume
|
||||
* On all new archive volumes, we shift to wrblksz (if the user
|
||||
* specified one, otherwize we will continue to use rdblksz). We
|
||||
* specified one, otherwise we will continue to use rdblksz). We
|
||||
* must to set blocksize based on what kind of device the archive is
|
||||
* stored.
|
||||
*/
|
||||
|
@ -381,7 +381,7 @@ ar_close(void)
|
|||
|
||||
/*
|
||||
* If we have not determined the format yet, we just say how many bytes
|
||||
* we have skipped over looking for a header to id. there is no way we
|
||||
* we have skipped over looking for a header to id. There is no way we
|
||||
* could have written anything yet.
|
||||
*/
|
||||
if (frmt == NULL) {
|
||||
|
@ -595,7 +595,7 @@ ar_read(char *buf, int cnt)
|
|||
* Return:
|
||||
* Number of bytes written. 0 indicates end of volume reached and with no
|
||||
* flaws (as best that can be detected). A -1 indicates an unrecoverable
|
||||
* error in the archive occured.
|
||||
* error in the archive occurred.
|
||||
*/
|
||||
|
||||
int
|
||||
|
@ -679,7 +679,7 @@ ar_write(char *buf, int bsz)
|
|||
* if this is a block aligned archive format, we may have a bad archive
|
||||
* if the format wants the header to start at a BLKMULT boundary. While
|
||||
* we can deal with the mis-aligned data, it violates spec and other
|
||||
* archive readers will likely fail. if the format is not block
|
||||
* archive readers will likely fail. If the format is not block
|
||||
* aligned, the user may be lucky (and the archive is ok).
|
||||
*/
|
||||
if (res >= 0) {
|
||||
|
@ -794,7 +794,7 @@ ar_rdsync(void)
|
|||
|
||||
/*
|
||||
* ar_fow()
|
||||
* Move the I/O position within the archive foward the specified number of
|
||||
* Move the I/O position within the archive forward the specified number of
|
||||
* bytes as supported by the device. If we cannot move the requested
|
||||
* number of bytes, return the actual number of bytes moved in skipped.
|
||||
* Return:
|
||||
|
@ -813,7 +813,7 @@ ar_fow(off_t sksz, off_t *skipped)
|
|||
return(0);
|
||||
|
||||
/*
|
||||
* we cannot move foward at EOF or error
|
||||
* we cannot move forward at EOF or error
|
||||
*/
|
||||
if (lstrval <= 0)
|
||||
return(lstrval);
|
||||
|
@ -822,7 +822,7 @@ ar_fow(off_t sksz, off_t *skipped)
|
|||
* Safer to read forward on devices where it is hard to find the end of
|
||||
* the media without reading to it. With tapes we cannot be sure of the
|
||||
* number of physical blocks to skip (we do not know physical block
|
||||
* size at this point), so we must only read foward on tapes!
|
||||
* size at this point), so we must only read forward on tapes!
|
||||
*/
|
||||
if (artyp != ISREG)
|
||||
return(0);
|
||||
|
@ -907,7 +907,7 @@ ar_rev(off_t sksz)
|
|||
|
||||
/*
|
||||
* we may try to go backwards past the start when the archive
|
||||
* is only a single record. If this hapens and we are on a
|
||||
* is only a single record. If this happens and we are on a
|
||||
* multi volume archive, we need to go to the end of the
|
||||
* previous volume and continue our movement backwards from
|
||||
* there.
|
||||
|
@ -1046,7 +1046,7 @@ get_phys(void)
|
|||
}
|
||||
|
||||
/*
|
||||
* read foward to the file mark, then back up in front of the filemark
|
||||
* read forward to the file mark, then back up in front of the filemark
|
||||
* (this is a bit paranoid, but should be safe to do).
|
||||
*/
|
||||
while ((res = read(arfd, scbuf, sizeof(scbuf))) > 0)
|
||||
|
|
|
@ -854,7 +854,7 @@ copy(void)
|
|||
}
|
||||
|
||||
/*
|
||||
* Non standard -Y and -Z flag. When the exisiting file is
|
||||
* Non standard -Y and -Z flag. When the existing file is
|
||||
* same age or newer skip
|
||||
*/
|
||||
if ((Yflag || Zflag) && ((lstat(arcn->name, &sb) == 0))) {
|
||||
|
@ -1096,7 +1096,7 @@ next_head(ARCHD *arcn)
|
|||
}
|
||||
|
||||
/*
|
||||
* ok got a valid header, check for trailer if format encodes it in the
|
||||
* ok got a valid header, check for trailer if format encodes it in
|
||||
* the header.
|
||||
*/
|
||||
if (frmt->inhead && ((*frmt->trail_cpio)(arcn) == 0)) {
|
||||
|
|
|
@ -145,7 +145,7 @@ rd_start(void)
|
|||
}
|
||||
if (wrblksz % BLKMULT) {
|
||||
paxwarn(1, "Write block size %d is not a %d byte multiple",
|
||||
wrblksz, BLKMULT);
|
||||
wrblksz, BLKMULT);
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
|
@ -182,13 +182,13 @@ cp_start(void)
|
|||
* the start of the header of the first file added to the archive. The
|
||||
* format specific end read function tells us how many bytes to move
|
||||
* backwards in the archive to be positioned BEFORE the trailer. Two
|
||||
* different postions have to be adjusted, the O.S. file offset (e.g. the
|
||||
* different positions have to be adjusted, the O.S. file offset (e.g. the
|
||||
* position of the tape head) and the write point within the data we have
|
||||
* stored in the read (soon to become write) buffer. We may have to move
|
||||
* back several records (the number depends on the size of the archive
|
||||
* record and the size of the format trailer) to read up the record where
|
||||
* the first byte of the trailer is recorded. Trailers may span (and
|
||||
* overlap) record boundries.
|
||||
* overlap) record boundaries.
|
||||
* We first calculate which record has the first byte of the trailer. We
|
||||
* move the OS file offset back to the start of this record and read it
|
||||
* up. We set the buffer write pointer to be at this byte (the byte where
|
||||
|
@ -196,10 +196,10 @@ cp_start(void)
|
|||
* start of this record so a flush of this buffer will replace the record
|
||||
* in the archive.
|
||||
* A major problem is rewriting this last record. For archives stored
|
||||
* on disk files, this is trival. However, many devices are really picky
|
||||
* on disk files, this is trivial. However, many devices are really picky
|
||||
* about the conditions under which they will allow a write to occur.
|
||||
* Often devices restrict the conditions where writes can be made writes,
|
||||
* so it may not be feasable to append archives stored on all types of
|
||||
* so it may not be feasible to append archives stored on all types of
|
||||
* devices.
|
||||
* Return:
|
||||
* 0 for success, -1 for failure
|
||||
|
@ -365,7 +365,7 @@ rd_sync(void)
|
|||
* pback()
|
||||
* push the data used during the archive id phase back into the I/O
|
||||
* buffer. This is required as we cannot be sure that the header does NOT
|
||||
* overlap a block boundry (as in the case we are trying to recover a
|
||||
* overlap a block boundary (as in the case we are trying to recover a
|
||||
* flawed archived). This was not designed to be used for any other
|
||||
* purpose. (What software engineering, HA!)
|
||||
* WARNING: do not even THINK of pback greater than BLKMULT, unless the
|
||||
|
@ -382,7 +382,7 @@ pback(char *pt, int cnt)
|
|||
|
||||
/*
|
||||
* rd_skip()
|
||||
* skip foward in the archive during an archive read. Used to get quickly
|
||||
* skip forward in the archive during an archive read. Used to get quickly
|
||||
* past file data and padding for files the user did NOT select.
|
||||
* Return:
|
||||
* 0 if ok, -1 failure, and 1 when EOF on the archive volume was detected.
|
||||
|
@ -396,7 +396,7 @@ rd_skip(off_t skcnt)
|
|||
off_t skipped = 0;
|
||||
|
||||
/*
|
||||
* consume what data we have in the buffer. If we have to move foward
|
||||
* consume what data we have in the buffer. If we have to move forward
|
||||
* whole records, we call the low level skip function to see if we can
|
||||
* move within the archive without doing the expensive reads on data we
|
||||
* do not want.
|
||||
|
@ -453,7 +453,7 @@ rd_skip(off_t skcnt)
|
|||
* wr_fin()
|
||||
* flush out any data (and pad if required) the last block. We always pad
|
||||
* with zero (even though we do not have to). Padding with 0 makes it a
|
||||
* lot easier to recover if the archive is damaged. zero paddding SHOULD
|
||||
* lot easier to recover if the archive is damaged. zero padding SHOULD
|
||||
* BE a requirement....
|
||||
*/
|
||||
|
||||
|
@ -530,7 +530,7 @@ rd_wrbuf(char *in, int cpcnt)
|
|||
/*
|
||||
* read error, return what we got (or the error if
|
||||
* no data was copied). The caller must know that an
|
||||
* error occured and has the best knowledge what to
|
||||
* error occurred and has the best knowledge what to
|
||||
* do with it
|
||||
*/
|
||||
if ((res = cpcnt - incnt) > 0)
|
||||
|
@ -584,7 +584,7 @@ wr_skip(off_t skcnt)
|
|||
|
||||
/*
|
||||
* wr_rdfile()
|
||||
* fill write buffer with the contents of a file. We are passed an open
|
||||
* fill write buffer with the contents of a file. We are passed an open
|
||||
* file descriptor to the file and the archive structure that describes the
|
||||
* file we are storing. The variable "left" is modified to contain the
|
||||
* number of bytes of the file we were NOT able to write to the archive.
|
||||
|
@ -671,7 +671,7 @@ rd_wrfile(ARCHD *arcn, int ofd, off_t *left)
|
|||
int isem = 1;
|
||||
int rem;
|
||||
int sz = MINFBSZ;
|
||||
struct stat sb;
|
||||
struct stat sb;
|
||||
u_long crc = 0L;
|
||||
|
||||
/*
|
||||
|
@ -884,7 +884,7 @@ buf_flush(int bufcnt)
|
|||
|
||||
/*
|
||||
* if we have reached the user specified byte count for each archive
|
||||
* volume, prompt for the next volume. (The non-standrad -R flag).
|
||||
* volume, prompt for the next volume. (The non-standard -R flag).
|
||||
* NOTE: If the wrlimit is smaller than wrcnt, we will always write
|
||||
* at least one record. We always round limit UP to next blocksize.
|
||||
*/
|
||||
|
@ -944,7 +944,7 @@ buf_flush(int bufcnt)
|
|||
} else if (cnt > 0) {
|
||||
/*
|
||||
* Oh drat we got a partial write!
|
||||
* if format doesnt care about alignment let it go,
|
||||
* if format doesn't care about alignment let it go,
|
||||
* we warned the user in ar_write().... but this means
|
||||
* the last record on this volume violates pax spec....
|
||||
*/
|
||||
|
|
|
@ -627,7 +627,7 @@ vcpio_rd(ARCHD *arcn, char *buf)
|
|||
return(-1);
|
||||
|
||||
/*
|
||||
* skip padding. header + filename is aligned to 4 byte boundries
|
||||
* skip padding. header + filename is aligned to 4 byte boundaries
|
||||
*/
|
||||
if (rd_skip((off_t)(VCPIO_PAD(sizeof(HD_VCPIO) + nsz))) < 0)
|
||||
return(-1);
|
||||
|
@ -942,7 +942,7 @@ bcpio_rd(ARCHD *arcn, char *buf)
|
|||
return(-1);
|
||||
|
||||
/*
|
||||
* header + file name are aligned to 2 byte boundries, skip if needed
|
||||
* header + file name are aligned to 2 byte boundaries, skip if needed
|
||||
*/
|
||||
if (rd_skip((off_t)(BCPIO_PAD(sizeof(HD_BCPIO) + nsz))) < 0)
|
||||
return(-1);
|
||||
|
@ -989,8 +989,8 @@ bcpio_endrd(void)
|
|||
* bcpio_wr()
|
||||
* copy the data in the ARCHD to buffer in old binary cpio format
|
||||
* There is a real chance of field overflow with this critter. So we
|
||||
* always check the conversion is ok. nobody in his their right mind
|
||||
* should write an achive in this format...
|
||||
* always check that the conversion is ok. nobody in their right mind
|
||||
* should write an archive in this format...
|
||||
* Return
|
||||
* 0 if file has data to be written after the header, 1 if file has NO
|
||||
* data to write after the header, -1 if archive write failed
|
||||
|
|
|
@ -84,9 +84,9 @@ file_creat(ARCHD *arcn)
|
|||
* works. We have to take special handling when the file does exist. To
|
||||
* detect this, we use O_EXCL. For example when trying to create a
|
||||
* file and a character device or fifo exists with the same name, we
|
||||
* can accidently open the device by mistake (or block waiting to open)
|
||||
* If we find that the open has failed, then figure spend the effort to
|
||||
* figure out why. This strategy was found to have better average
|
||||
* can accidentally open the device by mistake (or block waiting to
|
||||
* open). If we find that the open has failed, then spend the effort
|
||||
* to figure out why. This strategy was found to have better average
|
||||
* performance in common use than checking the file (and the path)
|
||||
* first with lstat.
|
||||
*/
|
||||
|
@ -559,7 +559,7 @@ chk_path( char *name, uid_t st_uid, gid_t st_gid)
|
|||
|
||||
for(;;) {
|
||||
/*
|
||||
* work foward from the first / and check each part of the path
|
||||
* work forward from the first / and check each part of the path
|
||||
*/
|
||||
spt = strchr(spt, '/');
|
||||
if (spt == NULL)
|
||||
|
@ -600,7 +600,7 @@ chk_path( char *name, uid_t st_uid, gid_t st_gid)
|
|||
(void)set_ids(name, st_uid, st_gid);
|
||||
|
||||
/*
|
||||
* make sure the user doen't have some strange umask that
|
||||
* make sure the user doesn't have some strange umask that
|
||||
* causes this newly created directory to be unusable. We fix
|
||||
* the modes and restore them back to the creation default at
|
||||
* the end of pax
|
||||
|
@ -716,11 +716,11 @@ set_pmode(char *fnm, mode_t mode)
|
|||
* uses lseek whenever it detects the input data is all 0 within that
|
||||
* file block. In more detail, the strategy is as follows:
|
||||
* While the input is all zero keep doing an lseek. Keep track of when we
|
||||
* pass over file block boundries. Only write when we hit a non zero
|
||||
* pass over file block boundaries. Only write when we hit a non zero
|
||||
* input. once we have written a file block, we continue to write it to
|
||||
* the end (we stop looking at the input). When we reach the start of the
|
||||
* next file block, start checking for zero blocks again. Working on file
|
||||
* block boundries significantly reduces the overhead when copying files
|
||||
* block boundaries significantly reduces the overhead when copying files
|
||||
* that are NOT very sparse. This overhead (when compared to a write) is
|
||||
* almost below the measurement resolution on many systems. Without it,
|
||||
* files with holes cannot be safely copied. It does has a side effect as
|
||||
|
@ -923,7 +923,7 @@ set_crc(ARCHD *arcn, int fd)
|
|||
|
||||
/*
|
||||
* safety check. we want to avoid archiving files that are active as
|
||||
* they can create inconsistant archive copies.
|
||||
* they can create inconsistent archive copies.
|
||||
*/
|
||||
if (cpcnt != arcn->sb.st_size)
|
||||
paxwarn(1, "File changed size %s", arcn->org_name);
|
||||
|
|
|
@ -101,8 +101,8 @@ ftree_start(void)
|
|||
/*
|
||||
* optional user flags that effect file traversal
|
||||
* -H command line symlink follow only (half follow)
|
||||
* -L follow sylinks (logical)
|
||||
* -P do not follow sylinks (physical). This is the default.
|
||||
* -L follow symlinks (logical)
|
||||
* -P do not follow symlinks (physical). This is the default.
|
||||
* -X do not cross over mount points
|
||||
* -t preserve access times on files read.
|
||||
* -n select only the first member of a file tree when a match is found
|
||||
|
|
|
@ -887,7 +887,7 @@ tar_options(int argc, char **argv)
|
|||
sawpat = 1;
|
||||
}
|
||||
/*
|
||||
* if patterns were added, we are doing chdir()
|
||||
* if patterns were added, we are doing chdir()
|
||||
* on a file-by-file basis, else, just one
|
||||
* global chdir (if any) after opening input.
|
||||
*/
|
||||
|
|
|
@ -397,7 +397,7 @@ pat_sel(ARCHD *arcn)
|
|||
/*
|
||||
* should never happen....
|
||||
*/
|
||||
paxwarn(1, "Pattern list inconsistant");
|
||||
paxwarn(1, "Pattern list inconsistent");
|
||||
return(-1);
|
||||
}
|
||||
*ppt = pt->fow;
|
||||
|
|
|
@ -372,7 +372,7 @@ gen_init(void)
|
|||
/*
|
||||
* signal handling to reset stored directory times and modes. Since
|
||||
* we deal with broken pipes via failed writes we ignore it. We also
|
||||
* deal with any file size limit thorugh failed writes. Cpu time
|
||||
* deal with any file size limit thorough failed writes. Cpu time
|
||||
* limits are caught and a cleanup is forced.
|
||||
*/
|
||||
if ((sigemptyset(&s_mask) < 0) || (sigaddset(&s_mask, SIGTERM) < 0) ||
|
||||
|
|
|
@ -376,7 +376,7 @@ trng_add(char *str)
|
|||
}
|
||||
|
||||
/*
|
||||
* by default we only will check file mtime, but usee can specify
|
||||
* by default we only will check file mtime, but the user can specify
|
||||
* mtime, ctime (inode change time) or both.
|
||||
*/
|
||||
if ((flgpt == NULL) || (*flgpt == '\0'))
|
||||
|
|
|
@ -209,7 +209,7 @@ chk_lnk(ARCHD *arcn)
|
|||
* purg_lnk
|
||||
* remove reference for a file that we may have added to the data base as
|
||||
* a potential source for hard links. We ended up not using the file, so
|
||||
* we do not want to accidently point another file at it later on.
|
||||
* we do not want to accidentally point another file at it later on.
|
||||
*/
|
||||
|
||||
void
|
||||
|
@ -306,14 +306,14 @@ lnk_end(void)
|
|||
* An append with an -u must read the archive and store the modification time
|
||||
* for every file on that archive before starting the write phase. It is clear
|
||||
* that this is one HUGE database. To save memory space, the actual file names
|
||||
* are stored in a scatch file and indexed by an in memory hash table. The
|
||||
* are stored in a scratch file and indexed by an in memory hash table. The
|
||||
* hash table is indexed by hashing the file path. The nodes in the table store
|
||||
* the length of the filename and the lseek offset within the scratch file
|
||||
* where the actual name is stored. Since there are never any deletions to this
|
||||
* table, fragmentation of the scratch file is never an issue. Lookups seem to
|
||||
* not exhibit any locality at all (files in the database are rarely
|
||||
* looked up more than once...). So caching is just a waste of memory. The
|
||||
* only limitation is the amount of scatch file space available to store the
|
||||
* only limitation is the amount of scratch file space available to store the
|
||||
* path names.
|
||||
*/
|
||||
|
||||
|
|
|
@ -291,7 +291,7 @@ tar_chksm(char *blk, int len)
|
|||
/*
|
||||
* tar_id()
|
||||
* determine if a block given to us is a valid tar header (and not a USTAR
|
||||
* header). We have to be on the lookout for those pesky blocks of all
|
||||
* header). We have to be on the lookout for those pesky blocks of all
|
||||
* zero's.
|
||||
* Return:
|
||||
* 0 if a tar header, -1 otherwise
|
||||
|
|
|
@ -219,7 +219,7 @@ main(int argc, char *argv[])
|
|||
case 'A':
|
||||
/*
|
||||
* Exactly the same as `-ax'. This has been
|
||||
* added for compatability with SUSv3, but for
|
||||
* added for compatibility with SUSv3, but for
|
||||
* now it will not be described in the man page.
|
||||
*/
|
||||
nselectors++;
|
||||
|
|
|
@ -714,15 +714,9 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd)
|
|||
oexitstatus = exitstatus;
|
||||
exitstatus = 0;
|
||||
for (argp = cmd->ncmd.args ; argp ; argp = argp->narg.next) {
|
||||
char *p = argp->narg.text;
|
||||
if (varflag && is_name(*p)) {
|
||||
do {
|
||||
p++;
|
||||
} while (is_in_name(*p));
|
||||
if (*p == '=') {
|
||||
expandarg(argp, &varlist, EXP_VARTILDE);
|
||||
continue;
|
||||
}
|
||||
if (varflag && isassignment(argp->narg.text)) {
|
||||
expandarg(argp, &varlist, EXP_VARTILDE);
|
||||
continue;
|
||||
}
|
||||
expandarg(argp, &arglist, EXP_FULL | EXP_TILDE);
|
||||
varflag = 0;
|
||||
|
|
|
@ -281,7 +281,6 @@ readcmdfile(const char *name)
|
|||
static char *
|
||||
find_dot_file(char *basename)
|
||||
{
|
||||
static char localname[FILENAME_MAX+1];
|
||||
char *fullname;
|
||||
const char *path = pathval();
|
||||
struct stat statb;
|
||||
|
@ -291,10 +290,14 @@ find_dot_file(char *basename)
|
|||
return basename;
|
||||
|
||||
while ((fullname = padvance(&path, basename)) != NULL) {
|
||||
strcpy(localname, fullname);
|
||||
if ((stat(fullname, &statb) == 0) && S_ISREG(statb.st_mode)) {
|
||||
/*
|
||||
* Don't bother freeing here, since it will
|
||||
* be freed by the caller.
|
||||
*/
|
||||
return fullname;
|
||||
}
|
||||
stunalloc(fullname);
|
||||
if ((stat(fullname, &statb) == 0) && S_ISREG(statb.st_mode))
|
||||
return localname;
|
||||
}
|
||||
return basename;
|
||||
}
|
||||
|
|
|
@ -75,7 +75,7 @@ __FBSDID("$FreeBSD$");
|
|||
|
||||
|
||||
/*
|
||||
* A text structure is basicly just a string that grows as more characters
|
||||
* A text structure is basically just a string that grows as more characters
|
||||
* are added onto the end of it. It is implemented as a linked list of
|
||||
* blocks of characters. The routines addstr and addchar append a string
|
||||
* or a single character, respectively, to a text structure. Writetext
|
||||
|
|
|
@ -50,7 +50,6 @@ TPIPE 0 "|"
|
|||
TLP 0 "("
|
||||
TRP 1 ")"
|
||||
TENDCASE 1 ";;"
|
||||
TENDBQUOTE 1 "`"
|
||||
TREDIR 0 redirection
|
||||
TWORD 0 word
|
||||
TIF 0 "if"
|
||||
|
|
|
@ -619,6 +619,7 @@ simplecmd(union node **rpp, union node *redir)
|
|||
union node **orig_rpp = rpp;
|
||||
union node *n = NULL;
|
||||
int special;
|
||||
int savecheckkwd;
|
||||
|
||||
/* If we don't have any redirections already, then we must reset */
|
||||
/* rpp to be the address of the local redir variable. */
|
||||
|
@ -634,7 +635,10 @@ simplecmd(union node **rpp, union node *redir)
|
|||
*/
|
||||
orig_rpp = rpp;
|
||||
|
||||
savecheckkwd = CHKALIAS;
|
||||
|
||||
for (;;) {
|
||||
checkkwd = savecheckkwd;
|
||||
if (readtoken() == TWORD) {
|
||||
n = (union node *)stalloc(sizeof (struct narg));
|
||||
n->type = NARG;
|
||||
|
@ -642,6 +646,8 @@ simplecmd(union node **rpp, union node *redir)
|
|||
n->narg.backquote = backquotelist;
|
||||
*app = n;
|
||||
app = &n->narg.next;
|
||||
if (savecheckkwd != 0 && !isassignment(wordtext))
|
||||
savecheckkwd = 0;
|
||||
} else if (lasttoken == TREDIR) {
|
||||
*rpp = n = redirnode;
|
||||
rpp = &n->nfile.next;
|
||||
|
@ -1859,6 +1865,22 @@ goodname(const char *name)
|
|||
}
|
||||
|
||||
|
||||
int
|
||||
isassignment(const char *p)
|
||||
{
|
||||
if (!is_name(*p))
|
||||
return 0;
|
||||
p++;
|
||||
for (;;) {
|
||||
if (*p == '=')
|
||||
return 1;
|
||||
else if (!is_in_name(*p))
|
||||
return 0;
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Called when an unexpected token is read during the parse. The argument
|
||||
* is the token that is expected, or -1 if more than one type of token can
|
||||
|
|
|
@ -80,4 +80,5 @@ extern const char *const parsekwd[];
|
|||
union node *parsecmd(int);
|
||||
void fixredir(union node *, const char *, int);
|
||||
int goodname(const char *);
|
||||
int isassignment(const char *);
|
||||
char *getprompt(void *);
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
.\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd May 20, 2011
|
||||
.Dd May 21, 2011
|
||||
.Dt SH 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -506,8 +506,8 @@ The following are keywords:
|
|||
An alias is a name and corresponding value set using the
|
||||
.Ic alias
|
||||
built-in command.
|
||||
Whenever a keyword may occur (see above),
|
||||
and after checking for keywords, the shell
|
||||
Wherever the command word of a simple command may occur,
|
||||
and after checking for keywords if a keyword may occur, the shell
|
||||
checks the word to see if it matches an alias.
|
||||
If it does, it replaces it in the input stream with its value.
|
||||
For example, if there is an alias called
|
||||
|
|
|
@ -15,7 +15,7 @@ CFLAGS+= -O1
|
|||
|
||||
TARGET_ARCH?= ${MACHINE_ARCH}
|
||||
# XXX: 8.0, to keep __FreeBSD_cc_version happy
|
||||
CFLAGS+=-DLLVM_HOSTTRIPLE=\"${TARGET_ARCH}-undermydesk-freebsd9.0\"
|
||||
CFLAGS+=-DLLVM_HOSTTRIPLE=\"${TARGET_ARCH:C/amd64/x86_64/}-unknown-freebsd9.0\"
|
||||
|
||||
.ifndef LLVM_REQUIRES_EH
|
||||
CXXFLAGS+=-fno-exceptions
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"
|
||||
.\" Copyright (c) 2000,2001,2002 Søren Schmidt <sos@FreeBSD.org>
|
||||
.\" Copyright (c) 2000,2001,2002 Søren Schmidt <sos@FreeBSD.org>
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*-
|
||||
* Copyright (c) 2000 - 2006 Søren Schmidt <sos@FreeBSD.org>
|
||||
* Copyright (c) 2000 - 2006 Søren Schmidt <sos@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -514,6 +514,7 @@ requnpack(struct hast_resource *res, struct hio *hio)
|
|||
goto end;
|
||||
}
|
||||
switch (hio->hio_cmd) {
|
||||
case HIO_FLUSH:
|
||||
case HIO_KEEPALIVE:
|
||||
break;
|
||||
case HIO_READ:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\"
|
||||
.\" Copyright (c) 1993,1994 Christopher G. Demetriou
|
||||
.\" Copyright (c) 1999 Semen Ustimenko
|
||||
.\" Copyright (c) 2005 Jean-Sébastien Pédron
|
||||
.\" Copyright (c) 2005 Jean-Sébastien Pédron
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 Jean-Sébastien Pédron
|
||||
* Copyright (c) 2005 Jean-Sébastien Pédron
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -136,7 +136,7 @@ be useful to set up clients and server for diskless boot.
|
|||
should never be overwritten by the templating copy.
|
||||
|
||||
|
||||
TYPICAL CUSTOMIZED CONFIGRATION SOFTLINKS
|
||||
TYPICAL CUSTOMIZED CONFIGURATION SOFTLINKS
|
||||
|
||||
The following files typically need to be turned into softlinks
|
||||
to /conf/ME/<filename>:
|
||||
|
@ -261,9 +261,9 @@ be useful to set up clients and server for diskless boot.
|
|||
identity.pub
|
||||
|
||||
WHEN INITIALLY CONVERTING A TARGET MACHINE TO USE TEMPLATING, ALWAYS
|
||||
MAKE A FULL BACKUP OF THE TARGET MACHINE FIRST! You may accidently delete
|
||||
files on the target during the conversion due to forgetting to enter
|
||||
items into appropriate .cpignore files on the source.
|
||||
MAKE A FULL BACKUP OF THE TARGET MACHINE FIRST! You may accidentally
|
||||
delete files on the target during the conversion due to forgetting to
|
||||
enter items into appropriate .cpignore files on the source.
|
||||
|
||||
SECURITY CONSIDERATIONS WITH NFS ROOT EXPORT FROM TEMPLATE MACHINE
|
||||
SECURITY CONSIDERATIONS WITH NFS USR EXPORT FROM TEMPLATE MACHINE
|
||||
|
|
|
@ -485,7 +485,7 @@ ${1}_isa_probe (device_t device)
|
|||
/*rid*/0, membase, memsize);
|
||||
/*
|
||||
* We found one, return non-positive numbers..
|
||||
* Return -N if we cant handle it, but not well.
|
||||
* Return -N if we can't handle it, but not well.
|
||||
* Return -2 if we would LIKE the device.
|
||||
* Return -1 if we want it a lot.
|
||||
* Return 0 if we MUST get the device.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*-
|
||||
* Copyright (c) 1991-1997 Søren Schmidt
|
||||
* Copyright (c) 1991-1997 Søren Schmidt
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -42,15 +42,15 @@ main(int argc, char **argv)
|
|||
|
||||
// set graphics mode, here 320x240 256 colors
|
||||
// supported modes are (from <sys/consio.h>):
|
||||
// SW_VGA_CG320: std VGA 320x200 256 colors
|
||||
// SW_VGA_MODEX: Modex VGA 320x240 256 colors
|
||||
// SW_VGA_VG640: std VGA 640x480 16 colors
|
||||
// SW_VGA_CG320: std VGA 320x200 256 colors
|
||||
// SW_VGA_MODEX: Modex VGA 320x240 256 colors
|
||||
// SW_VGA_VG640: std VGA 640x480 16 colors
|
||||
VGLInit(SW_VGA_MODEX);
|
||||
|
||||
// initialize mouse and show pointer
|
||||
VGLMouseInit(VGL_MOUSESHOW);
|
||||
|
||||
// VGLDisplay is a ptr to a struct Bitmap defined and initialized by
|
||||
// VGLDisplay is a ptr to a struct Bitmap defined and initialized by
|
||||
// libvgl. The Bitmap points directly to screen memory etc.
|
||||
xsize=VGLDisplay->Xsize;
|
||||
ysize=VGLDisplay->Ysize;
|
||||
|
@ -61,7 +61,7 @@ main(int argc, char **argv)
|
|||
VGLClear(tmp, 0);
|
||||
|
||||
// fill the screen with colored lines
|
||||
for (y=0; y<ysize; y++)
|
||||
for (y=0; y<ysize; y++)
|
||||
VGLLine(VGLDisplay, 0, y, xsize-1, y, y/2 % 256);
|
||||
|
||||
// draw some lines and circles just to show off
|
||||
|
@ -72,7 +72,7 @@ main(int argc, char **argv)
|
|||
VGLEllipse(VGLDisplay, 256, 0, 256, 256, 63);
|
||||
VGLEllipse(VGLDisplay, 0, 256, 256, 256, 0);
|
||||
|
||||
// some text is also usefull
|
||||
// some text is also useful
|
||||
VGLBitmapString(VGLDisplay, 100,100,
|
||||
"This is text", 63, 0, 0, VGL_DIR_RIGHT);
|
||||
sleep(2);
|
||||
|
@ -86,7 +86,7 @@ main(int argc, char **argv)
|
|||
"This is text", 63, 0, 0, VGL_DIR_DOWN);
|
||||
sleep(2);
|
||||
|
||||
// now show some simple bitblit
|
||||
// now show some simple bitblit
|
||||
for (i=0; i<256; i++)
|
||||
for (j=0; j<256; j++)
|
||||
tmp->Bitmap[i+256*j] = i%16;
|
||||
|
@ -106,12 +106,12 @@ main(int argc, char **argv)
|
|||
// loop around drawing and copying
|
||||
while (++i) {
|
||||
VGLBitmapCopy(VGLDisplay, rand()%xsize, rand()%ysize,
|
||||
VGLDisplay, rand()%xsize, rand()%ysize,
|
||||
rand()%xsize, rand()%ysize);
|
||||
VGLDisplay, rand()%xsize, rand()%ysize,
|
||||
rand()%xsize, rand()%ysize);
|
||||
VGLLine(VGLDisplay, rand()%xsize, rand()%ysize,
|
||||
rand()%xsize, rand()%ysize, rand()%256);
|
||||
VGLEllipse(VGLDisplay, rand()%xsize, rand()%ysize,
|
||||
rand()%xsize/2, rand()%ysize/2, rand()%256);
|
||||
rand()%xsize/2, rand()%ysize/2, rand()%256);
|
||||
rand();
|
||||
if (i > 1000) break;
|
||||
}
|
||||
|
@ -120,4 +120,3 @@ main(int argc, char **argv)
|
|||
VGLEnd();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ BRIDGE_NAME="bnet0"
|
|||
# machine as well then set ${LOCAL_IFACES} as well (they may also be
|
||||
# listed in ${BRIDGE_IFACES}). Of course, any ${LOCAL_IFACE} must
|
||||
# be ifconfig(8)ured separately. If you don't want a ${LOCAL_IFACE}
|
||||
# then assign it the emtpy string.
|
||||
# then assign it the empty string.
|
||||
|
||||
BRIDGE_IFACES="de0 fxp0 fxp1"
|
||||
LOCAL_IFACES="fxp0 fxp1"
|
||||
|
|
|
@ -13,13 +13,13 @@ ngctl mkpeer ${CARD}: frame_relay rawdata downstream
|
|||
# Link management protocol node.
|
||||
ngctl mkpeer ${CARD}:rawdata lmi dlci0 auto0
|
||||
|
||||
# Also attach dlci 1023, as it needs both to try autoconfiguring.
|
||||
# Also attach dlci 1023, as it needs both to try auto-configuring.
|
||||
# The Link management protocol is now alive and probing..
|
||||
ngctl connect ${CARD}:rawdata ${CARD}:rawdata.dlci0 dlci1023 auto1023
|
||||
|
||||
# Attach the DLCI(channel) the Telco has assigned you to
|
||||
# a node to hadle whatever protocol encapsulation your peer
|
||||
# is using. In this case rfc1490 encapsulation.
|
||||
# a node to handle whatever protocol encapsulation your peer
|
||||
# is using. In this case RFC1490 encapsulation.
|
||||
ngctl mkpeer ${CARD}:rawdata rfc1490 dlci${DLCI} downstream
|
||||
|
||||
|
||||
|
@ -34,8 +34,8 @@ ngctl mkpeer ${CARD}:rawdata.dlci${DLCI} iface inet inet
|
|||
# Then use ifconfig on interface ng0 as usual
|
||||
|
||||
# A variant on this whole set might use the 'name' command to make it more
|
||||
# readable. but it doesn't work if you have multiple lines or dlcis
|
||||
# e.g.
|
||||
# readable. But it doesn't work if you have multiple lines or dlcis
|
||||
# e.g.
|
||||
# ngctl mkpeer ${CARD}: frame_relay rawdata downstream
|
||||
# ngctl name ${CARD}:rawdata mux
|
||||
# ngctl mkpeer mux: lmi dlci0 auto0
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
|
||||
# Note that we used ngctl's ``name'' command to do this. However,
|
||||
# the following manually constructed netgraph message would have
|
||||
# acomplished the exact same thing:
|
||||
# accomplished the exact same thing:
|
||||
|
||||
+ msg foo name { name="fred" }
|
||||
|
||||
|
@ -85,7 +85,7 @@
|
|||
|
||||
# As soon as we sent the message, we got back a response. Here
|
||||
# ngctl is telling us that it received a control message with the
|
||||
# NGF_RESP (response) flag set, the reponse was to a prior ``getname''
|
||||
# NGF_RESP (response) flag set, the response was to a prior ``getname''
|
||||
# control message, that the originator was the node addressable
|
||||
# as ``fred:''. The message arguments field is then displayed to
|
||||
# us in its ASCII form. In this case, what we get back is a struct
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
CARD=sr0
|
||||
|
||||
# create an interface "ng0" and attach it to the sync port.
|
||||
# The packets had jolly well better be ip because we are not discriminating.
|
||||
# The packets had jolly well better be IP because we are not discriminating.
|
||||
ngctl mkpeer ${CARD}: iface rawdata inet
|
||||
|
||||
# if ng0 already exists, use a CONNECT command instead of a mkpeer. e.g.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2010, Yavuz Gokirmak
|
||||
# Copyright (c) 2010, Yavuz Gokirmak
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
|
@ -14,7 +14,6 @@
|
|||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
#
|
||||
# This script creates and connects n router like nodes. Complex wide
|
||||
# area topologies can be created with the help of script.
|
||||
#
|
||||
|
@ -25,9 +24,9 @@
|
|||
#
|
||||
# 0. Make your own copy of this example script.
|
||||
#
|
||||
# 1. Edit the definition of ${TARGET_TOPOLOGY} to define your virtual
|
||||
# 1. Edit the definition of ${TARGET_TOPOLOGY} to define your virtual
|
||||
# nodes. Virtual topology definition includes node names and their
|
||||
# IP address. Target top. sytax: ( name|ip<->name|ip ... )
|
||||
# IP address. Target top. syntax: ( name|ip<->name|ip ... )
|
||||
# Example 1: ( n1|10.0.2.1/30<->n2|10.0.2.2/30 ...)
|
||||
# Example 2: ( n1|2001:b90::14a/125<->n1|2001:b90::14b/125 ...)
|
||||
#
|
||||
|
@ -35,21 +34,21 @@
|
|||
#
|
||||
# 3. Add necessary static route commands for each virtual node. For
|
||||
# example assume you have three virtual nodes connected each other
|
||||
# llike a chain ( n1 is connected to n2, n2 is connecte to n3 ).
|
||||
# In order to estabklish connectivity among these virtual nodes,
|
||||
# like a chain (n1 is connected to n2, n2 is connected to n3).
|
||||
# In order to establish connectivity among these virtual nodes,
|
||||
# you have to add default routes to node n1 and node n3. Example
|
||||
# static route command is:
|
||||
# STATIC_ROUTE0="jexec n1 route add -inet default 10.0.2.2"
|
||||
# STATIC_ROUTE1="jexec n3 route add -inet default 10.0.2.5"
|
||||
# After defining default routes with above format you have to set
|
||||
# STATIC_ROUTE0="jexec n1 route add -inet default 10.0.2.2"
|
||||
# STATIC_ROUTE1="jexec n3 route add -inet default 10.0.2.5"
|
||||
# After defining default routes with above format you have to set
|
||||
# the total number of static route commands as:
|
||||
# STATIC_ROUTE_CNT=2
|
||||
#
|
||||
# 4. Stop bridging by running this script with "stop" as the
|
||||
# command line argument.
|
||||
#
|
||||
# 5. This cript uses a template file in order to carry information
|
||||
# between start and stop calls.
|
||||
#
|
||||
# 5. This script uses a template file in order to carry information
|
||||
# between start and stop calls.
|
||||
# In the start call, the netgraph interfaces and jails are created.
|
||||
# At the stop phase, all created objects should be removed.
|
||||
# DO NOT delete the temporary file between the start and stop phases.
|
||||
|
@ -84,8 +83,8 @@
|
|||
#
|
||||
#
|
||||
|
||||
# List the names of virtual nodes and their IP addresses. Use ':'
|
||||
# character to seperate node name from node IP address and netmask.
|
||||
# List the names of virtual nodes and their IP addresses. Use ':'
|
||||
# character to separate node name from node IP address and netmask.
|
||||
|
||||
TARGET_TOPOLOGY="n1|10.0.2.1/30<->n2|10.0.2.2/30 n2|10.0.2.5/30<->n3|10.0.2.6/30 n2|10.0.2.9/30<->n4|10.0.2.10/30"
|
||||
STATIC_ROUTE0="jexec n1 route add -inet default 10.0.2.2"
|
||||
|
@ -93,10 +92,10 @@ STATIC_ROUTE1="jexec n3 route add -inet default 10.0.2.5"
|
|||
STATIC_ROUTE2="jexec n4 route add -inet default 10.0.2.9"
|
||||
STATIC_ROUTE_CNT=3
|
||||
|
||||
# MAC manifacturer prefix. This can be modified according to needs.
|
||||
MAC_PREFIX="00:1d:92"
|
||||
# MAC manufacturer prefix. This can be modified according to needs.
|
||||
MAC_PREFIX="00:1d:92"
|
||||
|
||||
# Temporary file is important for proper execution of script.
|
||||
# Temporary file is important for proper execution of script.
|
||||
TEMP_FILE="/var/tmp/.virtual.chain.tmp"
|
||||
|
||||
# Set root directory for jails to be created.
|
||||
|
@ -112,7 +111,7 @@ JAIL_PATH="/usr/jails/router"
|
|||
virtual_chain_start() {
|
||||
|
||||
# Load netgraph KLD's as necessary.
|
||||
|
||||
|
||||
for KLD in ng_ether ng_bridge ng_eiface; do
|
||||
if ! kldstat -v | grep -qw ${KLD}; then
|
||||
echo -n "Loading ${KLD}.ko... "
|
||||
|
@ -122,21 +121,21 @@ virtual_chain_start() {
|
|||
done
|
||||
|
||||
# Reset all interfaces and jails. If temporary file can not be found
|
||||
# script assumes that there is no previous configuration.
|
||||
|
||||
# script assumes that there is no previous configuration.
|
||||
|
||||
if [ ! -e ${TEMP_FILE} ]; then
|
||||
echo "No previous configuration(${TEMP_FILE}) found to clean-up."
|
||||
else
|
||||
echo -n "Cleaning previous configuration..."
|
||||
virtual_chain_stop
|
||||
echo "done"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Create temporary file for usage. This file includes generated
|
||||
# Create temporary file for usage. This file includes generated
|
||||
# interface names and jail names. All bridges, interfaces and jails
|
||||
# are written to file while created. In clean-up process written
|
||||
# objects are cleaned (i.e removed) from system.
|
||||
|
||||
# are written to file while created. In clean-up process written
|
||||
# objects are cleaned (i.e. removed) from system.
|
||||
|
||||
if [ -e ${TEMP_FILE} ]; then
|
||||
touch ${TEMP_FILE}
|
||||
fi
|
||||
|
@ -144,40 +143,40 @@ virtual_chain_start() {
|
|||
|
||||
# Attach other interfaces as well.
|
||||
for CONNECTION in ${TARGET_TOPOLOGY}; do
|
||||
|
||||
|
||||
# Virtual connections are defined in TARGET_TOPOLOGY variable.
|
||||
# They have the form of 'nodeName|IPaddr'. Below two lines split
|
||||
|
||||
|
||||
PEER1=`echo ${CONNECTION} | awk -F"<->" '{print $1}'`
|
||||
PEER1_NAME=`echo ${PEER1} | awk -F"|" '{print $1}'`
|
||||
PEER1_IP=`echo ${PEER1} | awk -F"|" '{print $2}'`
|
||||
|
||||
|
||||
PEER2=`echo ${CONNECTION} | awk -F"<->" '{print $2}'`
|
||||
PEER2_NAME=`echo ${PEER2} | awk -F"|" '{print $1}'`
|
||||
PEER2_IP=`echo ${PEER2} | awk -F"|" '{print $2}'`
|
||||
|
||||
# !!! if not created already..
|
||||
# Create virtual node (jail) with given name and using
|
||||
# Create virtual node (jail) with given name and using
|
||||
# JAIL_PATH as root directory for jail.
|
||||
|
||||
virtual_chain_create_peer_if_necessary ${PEER1_NAME}
|
||||
virtual_chain_create_peer_if_necessary ${PEER2_NAME}
|
||||
|
||||
# create an interface for peer with the given peer IP. Get interface
|
||||
# for future use; you will connect this interface to the other
|
||||
# for future use; you will connect this interface to the other
|
||||
# peers' (PEER2) interface.
|
||||
virtual_chain_create_interface_with_ip ${PEER1_NAME} ${PEER1_IP}
|
||||
PEER1_INTERFACE=${RET_INTERFACE}
|
||||
|
||||
|
||||
# create an interface for peer with the given peer IP. Get interface
|
||||
# for future use; you will connect this interface to the other
|
||||
# for future use; you will connect this interface to the other
|
||||
# peers' (PEER2) interface.
|
||||
virtual_chain_create_interface_with_ip ${PEER2_NAME} ${PEER2_IP}
|
||||
PEER2_INTERFACE=${RET_INTERFACE}
|
||||
|
||||
# Connect virtual interface to other interface. Syntax is :
|
||||
# ngctl connect INTERFACE1: INTERFACE2: ether ether.
|
||||
|
||||
|
||||
echo -n "Connecting ${PEER1_INTERFACE}:ether to ${PEER2_INTERFACE}:ether..."
|
||||
ngctl connect ${PEER1_INTERFACE}: ${PEER2_INTERFACE}: ether ether \
|
||||
|| exit 1
|
||||
|
@ -193,7 +192,7 @@ virtual_chain_start() {
|
|||
i=`expr $i + 1`
|
||||
done
|
||||
|
||||
echo "Virtual WAN established succesfully!"
|
||||
echo "Virtual WAN established successfully!"
|
||||
}
|
||||
|
||||
virtual_chain_create_interface_with_ip() {
|
||||
|
@ -201,35 +200,35 @@ virtual_chain_create_interface_with_ip() {
|
|||
NODE_NAME=$1
|
||||
NODE_IP=$2
|
||||
|
||||
# Create a ng_eiface object for virtual node. ng_eiface
|
||||
# Create a ng_eiface object for virtual node. ng_eiface
|
||||
# object has a hook that can be connected to one of bridge
|
||||
# links. After creating interface get its automatically
|
||||
# generated name for further usage.
|
||||
# links. After creating interface get its automatically
|
||||
# generated name for further usage.
|
||||
|
||||
echo "Creating eiface interface for virtual node ${NODE_NAME}."
|
||||
ngctl mkpeer eiface ether ether
|
||||
EIFACE=`ngctl l | grep ngeth | tail -n 1| awk '{print $2}'`
|
||||
echo "Interface ${EIFACE} is created."
|
||||
|
||||
echo "Interface ${EIFACE} is created."
|
||||
|
||||
# Write name of the interface to temp file. Clean-up procedure
|
||||
# will use this name to shutdown interface.
|
||||
|
||||
|
||||
echo "interface ${EIFACE}" >> ${TEMP_FILE}
|
||||
|
||||
# Move virtual interface to virtual node. Note that Interface
|
||||
# Move virtual interface to virtual node. Note that Interface
|
||||
# name will not be changed at the end of this movement. Moved
|
||||
# interface can be seen at the output of ifconfig command in
|
||||
# jail: 'jexec jailname ifconfig'
|
||||
|
||||
echo "Moving ${EIFACE} to ${NODE_NAME}"
|
||||
echo "Moving ${EIFACE} to ${NODE_NAME}"
|
||||
ifconfig ${EIFACE} vnet ${NODE_NAME}
|
||||
|
||||
|
||||
# Make lo0 interface localhost.
|
||||
jexec ${NODE_NAME} ifconfig lo0 localhost
|
||||
|
||||
# Generate a random mac address for virtual interface. First
|
||||
# three octets can be changed by user. Last three octets are
|
||||
# generated randomly.
|
||||
# generated randomly.
|
||||
M4=`od -An -N2 -i /dev/random | sed -e 's/ //g' | \
|
||||
awk '{ print $1 % 256 }'`
|
||||
M5=`od -An -N2 -i /dev/random | sed -e 's/ //g' | \
|
||||
|
@ -244,16 +243,16 @@ virtual_chain_create_interface_with_ip() {
|
|||
echo "Setting MAC address of ${EIFACE} to '${MAC}'"
|
||||
jexec ${NODE_NAME} ifconfig ${EIFACE} link $MAC
|
||||
|
||||
# Either IPv4 or IPv6 can be used in this script. Ifconfig
|
||||
# Either IPv4 or IPv6 can be used in this script. Ifconfig
|
||||
# IP setting syntax differs slightly for two IP versions.
|
||||
# For version 4 'inet' keyword is used whereas for version 6
|
||||
# 'inet6' is used. Below line tries to decide which IP version
|
||||
# is given and sets IPVER to 'inet' or 'inet6'.
|
||||
# is given and sets IPVER to 'inet' or 'inet6'.
|
||||
|
||||
IPVER=`echo ${NODE_IP} | awk -F"." '{ split($4,last,"/"); \
|
||||
if( NF==4 && $1>0 && $1<256 && $2<256 && $3<256 && \
|
||||
last[1]<256) print "inet"; else print "inet6"}'`
|
||||
|
||||
|
||||
# Set IP address of virtual interface in virtual node.
|
||||
echo "Setting IP address of ${EIFACE} to '${NODE_IP}'"
|
||||
jexec ${NODE_NAME} ifconfig ${EIFACE} ${IPVER} ${NODE_IP}
|
||||
|
@ -264,23 +263,22 @@ virtual_chain_create_interface_with_ip() {
|
|||
virtual_chain_create_peer_if_necessary() {
|
||||
|
||||
if ! grep -q $1 ${TEMP_FILE} ; then
|
||||
|
||||
echo -n "Creating virtual node (jail) ${1}..."
|
||||
|
||||
echo -n "Creating virtual node (jail) ${1}..."
|
||||
jail -c vnet name=${1} host.hostname=${1} \
|
||||
path=${JAIL_PATH} persist
|
||||
path=${JAIL_PATH} persist
|
||||
jexec ${1} sysctl -w net.inet.ip.forwarding=1
|
||||
jexec ${1} sysctl -w net.inet6.ip6.forwarding=1
|
||||
echo "done"
|
||||
|
||||
# Write name of the jail to temp file. Clean-up
|
||||
|
||||
# Write name of the jail to temp file. Clean-up
|
||||
# procedure will use this name to remove jail.
|
||||
|
||||
|
||||
echo "node ${1}" >> ${TEMP_FILE}
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
# Stop routine.
|
||||
virtual_chain_stop() {
|
||||
|
||||
|
@ -288,31 +286,31 @@ virtual_chain_stop() {
|
|||
echo "Nothing to stop! ${TEMP_FILE}: temp file not found"
|
||||
else
|
||||
|
||||
echo -n "Shutdown bridge interface.."
|
||||
echo -n "Shutdown bridge interface.."
|
||||
OBJECTS=`cat ${TEMP_FILE} | grep bridge | awk '{print $2}'`
|
||||
for BRIDGE in ${OBJECTS}; do
|
||||
ngctl shutdown ${BRIDGE}: >/dev/null 2>&1
|
||||
done
|
||||
echo "done"
|
||||
|
||||
echo -n "Shutdown all eiface interfaces..."
|
||||
|
||||
echo -n "Shutdown all eiface interfaces..."
|
||||
OBJECTS=`cat ${TEMP_FILE} | grep interface | awk '{print $2}'`
|
||||
for INTERFACE in ${OBJECTS}; do
|
||||
ngctl shutdown ${INTERFACE}: >/dev/null 2>&1
|
||||
done
|
||||
echo "done"
|
||||
|
||||
echo -n "Removing all jails..."
|
||||
|
||||
echo -n "Removing all jails..."
|
||||
OBJECTS=`cat ${TEMP_FILE} | grep node | awk '{print $2}'`
|
||||
for NODE in ${OBJECTS}; do
|
||||
jail -r ${NODE}
|
||||
done
|
||||
echo "done"
|
||||
|
||||
echo "Removing tempfile ${TEMP_FILE}"
|
||||
|
||||
echo "Removing tempfile ${TEMP_FILE}"
|
||||
rm ${TEMP_FILE}
|
||||
fi
|
||||
echo "Virtual LAN objects removed succesfully!"
|
||||
echo "Virtual LAN objects removed successfully!"
|
||||
|
||||
}
|
||||
|
||||
|
@ -324,7 +322,6 @@ virtual_chain_usage() {
|
|||
|
||||
# Main entry point.
|
||||
|
||||
|
||||
case $# in
|
||||
1)
|
||||
case $1 in
|
||||
|
@ -340,7 +337,7 @@ case $# in
|
|||
echo " temp file not found"
|
||||
else
|
||||
virtual_chain_stop
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
help)
|
||||
virtual_chain_usage
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2010, Yavuz Gokirmak
|
||||
# Copyright (c) 2010, Yavuz Gokirmak
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
|
@ -13,13 +13,12 @@
|
|||
# its use.
|
||||
#
|
||||
# $FreeBSD$
|
||||
|
||||
#
|
||||
# This script adds virtual nodes to one of the physical interfaces
|
||||
# This script adds virtual nodes to one of the physical interfaces
|
||||
# visible on your local area network (LAN). Virtual nodes seems real
|
||||
# to external observers.
|
||||
# to external observers.
|
||||
# If traceroute is executed to one of virtual nodes, the IP
|
||||
# address of the physical interface will not be seen in the output.
|
||||
# address of the physical interface will not be seen in the output.
|
||||
# Virtual nodes are generated via jails and network connections are
|
||||
# established using ng_bridge(4) and ng_eiface(4) node types.
|
||||
#
|
||||
|
@ -29,11 +28,11 @@
|
|||
#
|
||||
# 1. Edit the definition of ${ETHER_INTF} as described below
|
||||
# to define your real interface connected to the LAN. Virtual nodes
|
||||
# will placed on the same physical network as this interface.
|
||||
# will placed on the same physical network as this interface.
|
||||
#
|
||||
# 2. Edit the definition of ${TARGET_TOPOLOGY} to define your virtual
|
||||
# 2. Edit the definition of ${TARGET_TOPOLOGY} to define your virtual
|
||||
# nodes. Virtual topology definition includes node names and their
|
||||
# IP address. Target top. sytax: ( node1|ip1/24 node2|ip2/24 ... )
|
||||
# IP address. Target top. syntax: ( node1|ip1/24 node2|ip2/24 ... )
|
||||
# Example 1: ( n1|122.122.122.12/24, n2|122.122.122.13/24 ...)
|
||||
# Example 2: ( n1|2001:b90::14a/125, n1|2001:b90::14b/125 ...)
|
||||
#
|
||||
|
@ -41,9 +40,9 @@
|
|||
#
|
||||
# 4. Stop bridging by running this script with "stop" as the
|
||||
# command line argument.
|
||||
#
|
||||
# 5. This cript uses a template file in order to carry information
|
||||
# between start and stop calls.
|
||||
#
|
||||
# 5. This script uses a template file in order to carry information
|
||||
# between start and stop calls.
|
||||
# In the start call, the netgraph interfaces and jails are created.
|
||||
# At the stop phase, all created objects should be removed.
|
||||
# DO NOT delete the temporary file between the start and stop phases.
|
||||
|
@ -80,19 +79,19 @@
|
|||
#
|
||||
|
||||
# Give the name of ethernet interface. Virtual nodes will be seen as
|
||||
# local neighbours of this interface.
|
||||
# local neighbours of this interface.
|
||||
|
||||
ETHER_INTF="em0"
|
||||
|
||||
# List the names of virtual nodes and their IP addresses. Use ':'
|
||||
# character to seperate node name from node IP address and netmask.
|
||||
# List the names of virtual nodes and their IP addresses. Use ':'
|
||||
# character to separate node name from node IP address and netmask.
|
||||
|
||||
TARGET_TOPOLOGY="c1|10.0.2.20/24 c2|10.0.2.21/24 c3|10.0.2.22/24"
|
||||
|
||||
# MAC manifacturer prefix. This can be modified according to needs.
|
||||
MAC_PREFIX="00:1d:92"
|
||||
# MAC manufacturer prefix. This can be modified according to needs.
|
||||
MAC_PREFIX="00:1d:92"
|
||||
|
||||
# Temporary file is important for proper execution of script.
|
||||
# Temporary file is important for proper execution of script.
|
||||
TEMP_FILE="/var/tmp/.virtual.lan.tmp"
|
||||
|
||||
# Set root directory for jails to be created.
|
||||
|
@ -108,7 +107,7 @@ JAIL_PATH="/usr/jails/node"
|
|||
virtual_lan_start() {
|
||||
|
||||
# Load netgraph KLD's as necessary.
|
||||
|
||||
|
||||
for KLD in ng_ether ng_bridge ng_eiface; do
|
||||
if ! kldstat -v | grep -qw ${KLD}; then
|
||||
echo -n "Loading ${KLD}.ko... "
|
||||
|
@ -118,21 +117,21 @@ virtual_lan_start() {
|
|||
done
|
||||
|
||||
# Reset all interfaces and jails. If temporary file can not be found
|
||||
# script assumes that there is no previous configuration.
|
||||
|
||||
# script assumes that there is no previous configuration.
|
||||
|
||||
if [ ! -e ${TEMP_FILE} ]; then
|
||||
echo "No previous configuration(${TEMP_FILE}) found to clean-up."
|
||||
else
|
||||
echo -n "Cleaning previous configuration..."
|
||||
virtual_lan_stop
|
||||
echo "done"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Create temporary file for usage. This file includes generated
|
||||
# Create temporary file for usage. This file includes generated
|
||||
# interface names and jail names. All bridges, interfaces and jails
|
||||
# are written to file while created. In clean-up process written
|
||||
# objects are cleaned (i.e removed) from system.
|
||||
|
||||
# are written to file while created. In clean-up process written
|
||||
# objects are cleaned (i.e. removed) from system.
|
||||
|
||||
if [ -e ${TEMP_FILE} ]; then
|
||||
touch ${TEMP_FILE}
|
||||
fi
|
||||
|
@ -150,20 +149,20 @@ virtual_lan_start() {
|
|||
# is used to create a name for new bridge.
|
||||
BRIDGE_COUNT=`ngctl l | grep bridge | wc -l | sed -e "s/ //g"`
|
||||
BRIDGE_NAME="bridge${BRIDGE_COUNT}"
|
||||
|
||||
|
||||
# Create new ng_bridge(4) node and attach it to the ethernet interface.
|
||||
# Connect ng_ether:lower hook to bridge:link0 when creating bridge and
|
||||
# connect ng_ether:upper hook to bridge:link1 after bridge name is set.
|
||||
|
||||
|
||||
echo "Creating bridge interface: ${BRIDGE_NAME}..."
|
||||
ngctl mkpeer ${ETHER_INTF}: bridge lower link0 || exit 1
|
||||
ngctl name ${ETHER_INTF}:lower ${BRIDGE_NAME} || exit 1
|
||||
ngctl connect ${ETHER_INTF}: ${BRIDGE_NAME}: upper link1 || exit 1
|
||||
echo "Bridge ${BRIDGE_NAME} is created and ${ETHER_INTF} is connected."
|
||||
|
||||
|
||||
# In the above code block two hooks are connected to bridge interface,
|
||||
# therefore LINKNUM is set to 2 indicating total number of connected
|
||||
# hooks on the bridge interface.
|
||||
# therefore LINKNUM is set to 2 indicating total number of connected
|
||||
# hooks on the bridge interface.
|
||||
LINKNUM=2
|
||||
|
||||
# Write name of the bridge to temp file. Clean-up procedure will use
|
||||
|
@ -173,7 +172,7 @@ virtual_lan_start() {
|
|||
|
||||
# Attach other interfaces as well.
|
||||
for NODE in ${TARGET_TOPOLOGY}; do
|
||||
|
||||
|
||||
# Virtual nodes are defined in TARGET_TOPOLOGY variable. They
|
||||
# have the form of 'nodeName|IPaddr'. Below two lines split
|
||||
# node definition to get node name and node IP.
|
||||
|
@ -181,48 +180,48 @@ virtual_lan_start() {
|
|||
NODE_NAME=`echo ${NODE} | awk -F"|" '{print $1}'`
|
||||
NODE_IP=`echo ${NODE} | awk -F"|" '{print $2}'`
|
||||
|
||||
# Create virtual node (jail) with given name and using
|
||||
# Create virtual node (jail) with given name and using
|
||||
# JAIL_PATH as root directory for jail.
|
||||
|
||||
echo -n "Creating virtual node (jail) ${NODE_NAME}..."
|
||||
echo -n "Creating virtual node (jail) ${NODE_NAME}..."
|
||||
jail -c vnet name=${NODE_NAME} host.hostname=${NODE_NAME} \
|
||||
path=${JAIL_PATH} persist
|
||||
path=${JAIL_PATH} persist
|
||||
echo "done"
|
||||
|
||||
# Write name of the jail to temp file. Clean-up procedure will
|
||||
|
||||
# Write name of the jail to temp file. Clean-up procedure will
|
||||
# use this name to remove jail.
|
||||
|
||||
|
||||
echo "node ${NODE_NAME}" >> ${TEMP_FILE}
|
||||
|
||||
# Create a ng_eiface object for virtual node. ng_eiface
|
||||
# Create a ng_eiface object for virtual node. ng_eiface
|
||||
# object has a hook that can be connected to one of bridge
|
||||
# links. After creating interface get its automatically
|
||||
# generated name for further usage.
|
||||
# links. After creating interface get its automatically
|
||||
# generated name for further usage.
|
||||
|
||||
echo "Creating eiface interface for virtual node ${NODE_NAME}."
|
||||
ngctl mkpeer eiface ether ether
|
||||
EIFACE=`ngctl l | grep ngeth | tail -n 1| awk '{print $2}'`
|
||||
echo "Interface ${EIFACE} is created."
|
||||
|
||||
echo "Interface ${EIFACE} is created."
|
||||
|
||||
# Write name of the interface to temp file. Clean-up procedure
|
||||
# will use this name to shutdown interface.
|
||||
|
||||
|
||||
echo "interface ${EIFACE}" >> ${TEMP_FILE}
|
||||
|
||||
# Move virtual interface to virtual node. Note that Interface
|
||||
|
||||
# Move virtual interface to virtual node. Note that Interface
|
||||
# name will not be changed at the end of this movement. Moved
|
||||
# interface can be seen at the output of ifconfig command in
|
||||
# jail: 'jexec jailname ifconfig'
|
||||
|
||||
echo "Moving ${EIFACE} to ${NODE_NAME}"
|
||||
echo "Moving ${EIFACE} to ${NODE_NAME}"
|
||||
ifconfig ${EIFACE} vnet ${NODE_NAME}
|
||||
|
||||
|
||||
# Make lo0 interface localhost.
|
||||
jexec ${NODE_NAME} ifconfig lo0 localhost
|
||||
|
||||
# Generate a random mac address for virtual interface. First
|
||||
# three octets can be changed by user. Last three octets are
|
||||
# generated randomly.
|
||||
# generated randomly.
|
||||
M4=`od -An -N2 -i /dev/random | sed -e 's/ //g' | \
|
||||
awk '{ print $1 % 256 }'`
|
||||
M5=`od -An -N2 -i /dev/random | sed -e 's/ //g' | \
|
||||
|
@ -237,35 +236,35 @@ virtual_lan_start() {
|
|||
echo "Setting MAC address of ${EIFACE} to '${MAC}'"
|
||||
jexec ${NODE_NAME} ifconfig ${EIFACE} link $MAC
|
||||
|
||||
# Either IPv4 or IPv6 can be used in this script. Ifconfig
|
||||
# Either IPv4 or IPv6 can be used in this script. Ifconfig
|
||||
# IP setting syntax differs slightly for two IP versions.
|
||||
# For version 4 'inet' keyword is used whereas for version 6
|
||||
# 'inet6' is used. Below line tries to decide which IP version
|
||||
# is given and sets IPVER to 'inet' or 'inet6'.
|
||||
# is given and sets IPVER to 'inet' or 'inet6'.
|
||||
|
||||
IPVER=`echo ${NODE_IP} | awk -F"." '{ split($4,last,"/"); \
|
||||
if( NF==4 && $1>0 && $1<256 && $2<256 && $3<256 && \
|
||||
last[1]<256) print "inet"; else print "inet6"}'`
|
||||
|
||||
|
||||
# Set IP address of virtual interface in virtual node.
|
||||
echo "Setting IP address of ${EIFACE} to '${NODE_IP}'"
|
||||
jexec ${NODE_NAME} ifconfig ${EIFACE} ${IPVER} ${NODE_IP}
|
||||
|
||||
|
||||
# Connect virtual interface to bridge interface. Syntax is :
|
||||
# ngctl connect INTERFACE: BRIDGE: INTERFACE_HOOK EMPTY_LINK.
|
||||
# Interface has one hook named 'ether' and below line connects
|
||||
# ether hook to bridge's first unconnected link.
|
||||
|
||||
# ether hook to bridge's first unconnected link.
|
||||
|
||||
echo -n "Connecting ${EIFACE}:ether to ${BRIDGE_NAME}:link${LINKNUM}..."
|
||||
ngctl connect ${EIFACE}: ${BRIDGE_NAME}: ether link${LINKNUM} \
|
||||
|| exit 1
|
||||
echo "done"
|
||||
|
||||
# Now, bridge has one more connected link thus link count is
|
||||
# incremented.
|
||||
# incremented.
|
||||
LINKNUM=`expr ${LINKNUM} + 1`
|
||||
done
|
||||
echo "Virtual LAN established succesfully!"
|
||||
echo "Virtual LAN established successfully!"
|
||||
|
||||
}
|
||||
|
||||
|
@ -276,31 +275,31 @@ virtual_lan_stop() {
|
|||
echo "Nothing to stop! ${TEMP_FILE}: temp file not found"
|
||||
else
|
||||
|
||||
echo -n "Shutdown bridge interface.."
|
||||
echo -n "Shutdown bridge interface.."
|
||||
OBJECTS=`cat ${TEMP_FILE} | grep bridge | awk '{print $2}'`
|
||||
for BRIDGE in ${OBJECTS}; do
|
||||
ngctl shutdown ${BRIDGE}: >/dev/null 2>&1
|
||||
done
|
||||
echo "done"
|
||||
|
||||
echo -n "Shutdown all eiface interfaces..."
|
||||
|
||||
echo -n "Shutdown all eiface interfaces..."
|
||||
OBJECTS=`cat ${TEMP_FILE} | grep interface | awk '{print $2}'`
|
||||
for INTERFACE in ${OBJECTS}; do
|
||||
ngctl shutdown ${INTERFACE}: >/dev/null 2>&1
|
||||
done
|
||||
echo "done"
|
||||
|
||||
echo -n "Removing all jails..."
|
||||
|
||||
echo -n "Removing all jails..."
|
||||
OBJECTS=`cat ${TEMP_FILE} | grep node | awk '{print $2}'`
|
||||
for NODE in ${OBJECTS}; do
|
||||
jail -r ${NODE}
|
||||
done
|
||||
echo "done"
|
||||
|
||||
echo "Removing tempfile ${TEMP_FILE}"
|
||||
|
||||
echo "Removing tempfile ${TEMP_FILE}"
|
||||
rm ${TEMP_FILE}
|
||||
fi
|
||||
echo "Virtual LAN objects removed succesfully!"
|
||||
echo "Virtual LAN objects removed successfully!"
|
||||
|
||||
}
|
||||
|
||||
|
@ -327,7 +326,7 @@ case $# in
|
|||
echo " temp file not found"
|
||||
else
|
||||
virtual_lan_stop
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
help)
|
||||
virtual_lan_usage
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"-
|
||||
.\" Copyright (c) 2002 Dag-Erling Coïdan Smørgrav
|
||||
.\" Copyright (c) 2002 Dag-Erling Coïdan Smørgrav
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"
|
||||
.\" Copyright (c) 2003 Søren Schmidt <sos@FreeBSD.org>
|
||||
.\" Copyright (c) 2003 Søren Schmidt <sos@FreeBSD.org>
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"-
|
||||
.\" Copyright (c) 2007 Dag-Erling Coïdan Smørgrav
|
||||
.\" Copyright (c) 2007 Dag-Erling Coïdan Smørgrav
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"-
|
||||
.\" Copyright (c) 2007 Dag-Erling Coïdan Smørgrav
|
||||
.\" Copyright (c) 2007 Dag-Erling Coïdan Smørgrav
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"
|
||||
.\" Copyright (c) 2001,2002 Søren Schmidt
|
||||
.\" Copyright (c) 2001,2002 Søren Schmidt
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"-
|
||||
.\" Copyright (c) 2004 Dag-Erling Coïdan Smørgrav
|
||||
.\" Copyright (c) 2004 Dag-Erling Coïdan Smørgrav
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"
|
||||
.\" Copyright (c) 2005 Jean-Sébastien Pédron
|
||||
.\" Copyright (c) 2005 Jean-Sébastien Pédron
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" DO NOT EDIT-- this file is automatically generated.
|
||||
.\" from FreeBSD: head/tools/build/options/makeman 221733 2011-05-10 13:01:11Z ru
|
||||
.\" $FreeBSD$
|
||||
.Dd May 17, 2011
|
||||
.Dd May 22, 2011
|
||||
.Dt SRC.CONF 5
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -206,6 +206,14 @@ and
|
|||
.\" from FreeBSD: head/tools/build/options/WITH_BIND_XML 193280 2009-06-01 21:58:59Z dougb
|
||||
Set to enable the http statistics interface for named.
|
||||
This requires ports/textproc/libxml2 to be installed in /usr/local.
|
||||
.It Va WITHOUT_BINUTILS
|
||||
.\" from FreeBSD: head/tools/build/options/WITHOUT_BINUTILS 222090 2011-05-19 05:13:25Z imp
|
||||
Set to not install binutils (as, c++-filt, gconv, gnu-ar, gnu-randlib,
|
||||
ld, nm, objcopy, objdump, readelf, size and strip)
|
||||
.Bf -symbolic
|
||||
The option does not generally work for build targets, unless some alternative
|
||||
toolchain is enabled.
|
||||
.Ef
|
||||
.It Va WITHOUT_BLUETOOTH
|
||||
.\" from FreeBSD: head/tools/build/options/WITHOUT_BLUETOOTH 156932 2006-03-21 07:50:50Z ru
|
||||
Set to not build Bluetooth related kernel modules, programs and libraries.
|
||||
|
@ -364,6 +372,13 @@ Set to not build
|
|||
.It Va WITHOUT_GAMES
|
||||
.\" from FreeBSD: head/tools/build/options/WITHOUT_GAMES 156932 2006-03-21 07:50:50Z ru
|
||||
Set to not build games.
|
||||
.It Va WITHOUT_GCC
|
||||
.\" from FreeBSD: head/tools/build/options/WITHOUT_GCC 222090 2011-05-19 05:13:25Z imp
|
||||
Set to not install gcc and g++.
|
||||
.Bf -symbolic
|
||||
The option does not generally work for build targets, unless some alternative
|
||||
toolchain is enabled.
|
||||
.Ef
|
||||
.It Va WITHOUT_GCOV
|
||||
.\" from FreeBSD: head/tools/build/options/WITHOUT_GCOV 156932 2006-03-21 07:50:50Z ru
|
||||
Set to not build the
|
||||
|
@ -512,6 +527,12 @@ Set to build some programs without Kerberos support, like
|
|||
.Xr sshd 8 ,
|
||||
and
|
||||
.Xr telnetd 8 .
|
||||
.It Va WITHOUT_KERNEL_SYMBOLS
|
||||
.\" from FreeBSD: head/tools/build/options/WITHOUT_KERNEL_SYMBOLS 222189 2011-05-22 18:23:17Z imp
|
||||
Set to not install kernel symbol files.
|
||||
.Bf -symbolic
|
||||
This option is recommended for those people who have small root partitions.
|
||||
.Ef
|
||||
.It Va WITHOUT_KVM
|
||||
.\" from FreeBSD: head/tools/build/options/WITHOUT_KVM 174550 2007-12-12 16:43:17Z ru
|
||||
Set to not build the
|
||||
|
@ -884,8 +905,12 @@ When set, it also enforces the following options:
|
|||
.Pp
|
||||
.Bl -item -compact
|
||||
.It
|
||||
.Va WITHOUT_BINUTILS
|
||||
.It
|
||||
.Va WITHOUT_CLANG
|
||||
.It
|
||||
.Va WITHOUT_GCC
|
||||
.It
|
||||
.Va WITHOUT_GDB
|
||||
.El
|
||||
.It Va WITHOUT_USB
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"-
|
||||
.\" Copyright (c) 2004 Dag-Erling Coïdan Smørgrav
|
||||
.\" Copyright (c) 2004 Dag-Erling Coïdan Smørgrav
|
||||
.\" Copyright (c) 2005 Robert N. M. Watson
|
||||
.\" Copyright (c) 2006 Kip Macy
|
||||
.\" All rights reserved.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"-
|
||||
.\" Copyright (c) 2001 Dag-Erling Coïdan Smørgrav
|
||||
.\" Copyright (c) 2001 Dag-Erling Coïdan Smørgrav
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"-
|
||||
.\" Copyright (c) 2000 Poul-Henning Kamp and Dag-Erling Coïdan Smørgrav
|
||||
.\" Copyright (c) 2000 Poul-Henning Kamp and Dag-Erling Coïdan Smørgrav
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"-
|
||||
.\" Copyright (c) 2001 Dag-Erling Coïdan Smørgrav
|
||||
.\" Copyright (c) 2001 Dag-Erling Coïdan Smørgrav
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -562,7 +562,7 @@ Australian Computer Society, Hobart, August 1993.
|
|||
Peter H. Salus. Unix at 25. Byte Magazine, October 1994.
|
||||
URL: http://www.byte.com/art/9410/sec8/art3.htm
|
||||
|
||||
Andreas Klemm, Lars Köller. If you're going to San Francisco ...
|
||||
Andreas Klemm, Lars Köller. If you're going to San Francisco ...
|
||||
Die freien BSD-Varianten von Unix. c't April 1997, page 368ff.
|
||||
|
||||
BSD Release Announcements collection.
|
||||
|
|
|
@ -335,6 +335,7 @@ __DEFAULT_YES_OPTIONS = \
|
|||
IPX \
|
||||
JAIL \
|
||||
KERBEROS \
|
||||
KERNEL_SYMBOLS \
|
||||
KVM \
|
||||
LEGACY_CONSOLE \
|
||||
LIB32 \
|
||||
|
|
|
@ -93,7 +93,7 @@ static int zfs_vget(vfs_t *vfsp, ino_t ino, int flags, vnode_t **vpp);
|
|||
static int zfs_sync(vfs_t *vfsp, int waitfor);
|
||||
static int zfs_checkexp(vfs_t *vfsp, struct sockaddr *nam, int *extflagsp,
|
||||
struct ucred **credanonp, int *numsecflavors, int **secflavors);
|
||||
static int zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, vnode_t **vpp);
|
||||
static int zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, int flags, vnode_t **vpp);
|
||||
static void zfs_objset_close(zfsvfs_t *zfsvfs);
|
||||
static void zfs_freevfs(vfs_t *vfsp);
|
||||
|
||||
|
@ -2007,7 +2007,7 @@ CTASSERT(SHORT_FID_LEN <= sizeof(struct fid));
|
|||
CTASSERT(LONG_FID_LEN <= sizeof(struct fid));
|
||||
|
||||
static int
|
||||
zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, vnode_t **vpp)
|
||||
zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, int flags, vnode_t **vpp)
|
||||
{
|
||||
zfsvfs_t *zfsvfs = vfsp->vfs_data;
|
||||
znode_t *zp;
|
||||
|
|
|
@ -227,7 +227,8 @@ kernel-install:
|
|||
.endif
|
||||
mkdir -p ${DESTDIR}${KODIR}
|
||||
${INSTALL} -p -m 555 -o ${KMODOWN} -g ${KMODGRP} ${KERNEL_KO} ${DESTDIR}${KODIR}
|
||||
.if defined(DEBUG) && !defined(INSTALL_NODEBUG)
|
||||
.if defined(DEBUG) && !defined(INSTALL_NODEBUG) && \
|
||||
(defined(MK_KERNEL_SYMBOLS) && ${MK_KERNEL_SYMBOLS} == "yes")
|
||||
${INSTALL} -p -m 555 -o ${KMODOWN} -g ${KMODGRP} ${KERNEL_KO}.symbols ${DESTDIR}${KODIR}
|
||||
.endif
|
||||
.if defined(KERNEL_EXTRA_INSTALL)
|
||||
|
@ -239,7 +240,8 @@ kernel-install:
|
|||
kernel-reinstall:
|
||||
@-chflags -R noschg ${DESTDIR}${KODIR}
|
||||
${INSTALL} -p -m 555 -o ${KMODOWN} -g ${KMODGRP} ${KERNEL_KO} ${DESTDIR}${KODIR}
|
||||
.if defined(DEBUG) && !defined(INSTALL_NODEBUG)
|
||||
.if defined(DEBUG) && !defined(INSTALL_NODEBUG) && \
|
||||
(defined(MK_KERNEL_SYMBOLS) && ${MK_KERNEL_SYMBOLS} == "yes")
|
||||
${INSTALL} -p -m 555 -o ${KMODOWN} -g ${KMODGRP} ${KERNEL_KO}.symbols ${DESTDIR}${KODIR}
|
||||
.endif
|
||||
|
||||
|
|
|
@ -286,7 +286,8 @@ realinstall: _kmodinstall
|
|||
_kmodinstall:
|
||||
${INSTALL} -o ${KMODOWN} -g ${KMODGRP} -m ${KMODMODE} \
|
||||
${_INSTALLFLAGS} ${PROG} ${DESTDIR}${KMODDIR}
|
||||
.if defined(DEBUG_FLAGS) && !defined(INSTALL_NODEBUG)
|
||||
.if defined(DEBUG) && !defined(INSTALL_NODEBUG) && \
|
||||
(defined(MK_KERNEL_SYMBOLS) && ${MK_KERNEL_SYMBOLS} == "yes")
|
||||
${INSTALL} -o ${KMODOWN} -g ${KMODGRP} -m ${KMODMODE} \
|
||||
${_INSTALLFLAGS} ${PROG}.symbols ${DESTDIR}${KMODDIR}
|
||||
.endif
|
||||
|
|
|
@ -1069,7 +1069,7 @@ ath_hal_ini_write(struct ath_hal *ah, const HAL_INI_ARRAY *ia,
|
|||
HAL_INI_VAL(ia, r, col));
|
||||
|
||||
/* Analog shift register delay seems needed for Merlin - PR kern/154220 */
|
||||
if (HAL_INI_VAL(ia, r, 0) >= 0x7800 && HAL_INI_VAL(ia, r, 0) < 0x78a0)
|
||||
if (HAL_INI_VAL(ia, r, 0) >= 0x7800 && HAL_INI_VAL(ia, r, 0) < 0x7900)
|
||||
OS_DELAY(100);
|
||||
|
||||
DMA_YIELD(regWr);
|
||||
|
|
|
@ -430,7 +430,7 @@ ar9280WriteIni(struct ath_hal *ah, const struct ieee80211_channel *chan)
|
|||
OS_REG_WRITE(ah, reg, val);
|
||||
|
||||
/* Analog shift register delay seems needed for Merlin - PR kern/154220 */
|
||||
if (reg >= 0x7800 && reg < 0x78a0)
|
||||
if (reg >= 0x7800 && reg < 0x7900)
|
||||
OS_DELAY(100);
|
||||
|
||||
DMA_YIELD(regWrites);
|
||||
|
|
|
@ -586,9 +586,10 @@ cd9660_statfs(mp, sbp)
|
|||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
cd9660_fhtovp(mp, fhp, vpp)
|
||||
cd9660_fhtovp(mp, fhp, flags, vpp)
|
||||
struct mount *mp;
|
||||
struct fid *fhp;
|
||||
int flags;
|
||||
struct vnode **vpp;
|
||||
{
|
||||
struct ifid ifh;
|
||||
|
|
|
@ -973,7 +973,7 @@ ext2_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp)
|
|||
* those rights via. exflagsp and credanonp
|
||||
*/
|
||||
static int
|
||||
ext2_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
|
||||
ext2_fhtovp(struct mount *mp, struct fid *fhp, int flags, struct vnode **vpp)
|
||||
{
|
||||
struct inode *ip;
|
||||
struct ufid *ufhp;
|
||||
|
|
|
@ -417,6 +417,7 @@ static int
|
|||
hpfs_fhtovp(
|
||||
struct mount *mp,
|
||||
struct fid *fhp,
|
||||
int flags,
|
||||
struct vnode **vpp)
|
||||
{
|
||||
struct vnode *nvp;
|
||||
|
|
|
@ -963,7 +963,7 @@ msdosfs_sync(struct mount *mp, int waitfor)
|
|||
}
|
||||
|
||||
static int
|
||||
msdosfs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
|
||||
msdosfs_fhtovp(struct mount *mp, struct fid *fhp, int flags, struct vnode **vpp)
|
||||
{
|
||||
struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
|
||||
struct defid *defhp = (struct defid *) fhp;
|
||||
|
|
|
@ -63,7 +63,6 @@ __FBSDID("$FreeBSD$");
|
|||
#include <sys/signalvar.h>
|
||||
|
||||
#include <vm/vm.h>
|
||||
#include <vm/vm_object.h>
|
||||
#include <vm/vm_extern.h>
|
||||
#include <vm/vm_object.h>
|
||||
|
||||
|
|
|
@ -2551,7 +2551,7 @@ nfsvno_fhtovp(struct mount *mp, fhandle_t *fhp, struct sockaddr *nam,
|
|||
if (VFS_NEEDSGIANT(mp))
|
||||
error = ESTALE;
|
||||
else
|
||||
error = VFS_FHTOVP(mp, &fhp->fh_fid, vpp);
|
||||
error = VFS_FHTOVP(mp, &fhp->fh_fid, LK_EXCLUSIVE, vpp);
|
||||
if (error != 0)
|
||||
/* Make sure the server replies ESTALE to the client. */
|
||||
error = ESTALE;
|
||||
|
@ -2834,7 +2834,7 @@ nfsvno_getvp(fhandle_t *fhp)
|
|||
mp = vfs_busyfs(&fhp->fh_fsid);
|
||||
if (mp == NULL)
|
||||
return (NULL);
|
||||
error = VFS_FHTOVP(mp, &fhp->fh_fid, &vp);
|
||||
error = VFS_FHTOVP(mp, &fhp->fh_fid, LK_EXCLUSIVE, &vp);
|
||||
vfs_unbusy(mp);
|
||||
if (error)
|
||||
return (NULL);
|
||||
|
|
|
@ -616,6 +616,7 @@ static int
|
|||
ntfs_fhtovp(
|
||||
struct mount *mp,
|
||||
struct fid *fhp,
|
||||
int flags,
|
||||
struct vnode **vpp)
|
||||
{
|
||||
struct vnode *nvp;
|
||||
|
|
|
@ -321,13 +321,15 @@ nullfs_vget(mp, ino, flags, vpp)
|
|||
}
|
||||
|
||||
static int
|
||||
nullfs_fhtovp(mp, fidp, vpp)
|
||||
nullfs_fhtovp(mp, fidp, flags, vpp)
|
||||
struct mount *mp;
|
||||
struct fid *fidp;
|
||||
int flags;
|
||||
struct vnode **vpp;
|
||||
{
|
||||
int error;
|
||||
error = VFS_FHTOVP(MOUNTTONULLMOUNT(mp)->nullm_vfs, fidp, vpp);
|
||||
error = VFS_FHTOVP(MOUNTTONULLMOUNT(mp)->nullm_vfs, fidp, LK_EXCLUSIVE,
|
||||
vpp);
|
||||
if (error)
|
||||
return (error);
|
||||
|
||||
|
|
|
@ -71,7 +71,8 @@ MALLOC_DEFINE(M_TMPFSNAME, "tmpfs name", "tmpfs file names");
|
|||
static int tmpfs_mount(struct mount *);
|
||||
static int tmpfs_unmount(struct mount *, int);
|
||||
static int tmpfs_root(struct mount *, int flags, struct vnode **);
|
||||
static int tmpfs_fhtovp(struct mount *, struct fid *, struct vnode **);
|
||||
static int tmpfs_fhtovp(struct mount *, struct fid *, int,
|
||||
struct vnode **);
|
||||
static int tmpfs_statfs(struct mount *, struct statfs *);
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
@ -341,7 +342,8 @@ tmpfs_root(struct mount *mp, int flags, struct vnode **vpp)
|
|||
/* --------------------------------------------------------------------- */
|
||||
|
||||
static int
|
||||
tmpfs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
|
||||
tmpfs_fhtovp(struct mount *mp, struct fid *fhp, int flags,
|
||||
struct vnode **vpp)
|
||||
{
|
||||
boolean_t found;
|
||||
struct tmpfs_fid *tfhp;
|
||||
|
|
|
@ -722,7 +722,7 @@ udf_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp)
|
|||
}
|
||||
|
||||
static int
|
||||
udf_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
|
||||
udf_fhtovp(struct mount *mp, struct fid *fhp, int flags, struct vnode **vpp)
|
||||
{
|
||||
struct ifid *ifhp;
|
||||
struct vnode *nvp;
|
||||
|
|
|
@ -454,7 +454,8 @@ unionfs_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp)
|
|||
}
|
||||
|
||||
static int
|
||||
unionfs_fhtovp(struct mount *mp, struct fid *fidp, struct vnode **vpp)
|
||||
unionfs_fhtovp(struct mount *mp, struct fid *fidp, int flags,
|
||||
struct vnode **vpp)
|
||||
{
|
||||
return (EOPNOTSUPP);
|
||||
}
|
||||
|
|
|
@ -335,7 +335,8 @@ reiserfs_statfs(struct mount *mp, struct statfs *sbp)
|
|||
* those rights via. exflagsp and credanonp
|
||||
*/
|
||||
static int
|
||||
reiserfs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
|
||||
reiserfs_fhtovp(struct mount *mp, struct fid *fhp, int flags,
|
||||
struct vnode **vpp)
|
||||
{
|
||||
int error;
|
||||
struct rfid *rfhp;
|
||||
|
|
|
@ -56,7 +56,7 @@ kdb_getarea_size(void *res, unsigned long addr, size_t size)
|
|||
}
|
||||
|
||||
int
|
||||
db_putarea_size(unsigned long addr, void *res, size_t size)
|
||||
kdb_putarea_size(unsigned long addr, void *res, size_t size)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -370,9 +370,10 @@ _xfs_vget(mp, ino, flags, vpp)
|
|||
}
|
||||
|
||||
static int
|
||||
_xfs_fhtovp(mp, fidp, vpp)
|
||||
_xfs_fhtovp(mp, fidp, flags, vpp)
|
||||
struct mount *mp;
|
||||
struct fid *fidp;
|
||||
int flags;
|
||||
struct vnode **vpp;
|
||||
{
|
||||
printf("xfs_fhtovp\n");
|
||||
|
|
|
@ -1081,9 +1081,10 @@ vfs_stdvget (mp, ino, flags, vpp)
|
|||
}
|
||||
|
||||
int
|
||||
vfs_stdfhtovp (mp, fhp, vpp)
|
||||
vfs_stdfhtovp (mp, fhp, flags, vpp)
|
||||
struct mount *mp;
|
||||
struct fid *fhp;
|
||||
int flags;
|
||||
struct vnode **vpp;
|
||||
{
|
||||
|
||||
|
|
|
@ -4405,7 +4405,7 @@ fhopen(td, uap)
|
|||
return (ESTALE);
|
||||
vfslocked = VFS_LOCK_GIANT(mp);
|
||||
/* now give me my vnode, it gets returned to me locked */
|
||||
error = VFS_FHTOVP(mp, &fhp.fh_fid, &vp);
|
||||
error = VFS_FHTOVP(mp, &fhp.fh_fid, LK_EXCLUSIVE, &vp);
|
||||
vfs_unbusy(mp);
|
||||
if (error)
|
||||
goto out;
|
||||
|
@ -4581,7 +4581,7 @@ fhstat(td, uap)
|
|||
if ((mp = vfs_busyfs(&fh.fh_fsid)) == NULL)
|
||||
return (ESTALE);
|
||||
vfslocked = VFS_LOCK_GIANT(mp);
|
||||
error = VFS_FHTOVP(mp, &fh.fh_fid, &vp);
|
||||
error = VFS_FHTOVP(mp, &fh.fh_fid, LK_EXCLUSIVE, &vp);
|
||||
vfs_unbusy(mp);
|
||||
if (error) {
|
||||
VFS_UNLOCK_GIANT(vfslocked);
|
||||
|
@ -4641,7 +4641,7 @@ kern_fhstatfs(struct thread *td, fhandle_t fh, struct statfs *buf)
|
|||
if ((mp = vfs_busyfs(&fh.fh_fsid)) == NULL)
|
||||
return (ESTALE);
|
||||
vfslocked = VFS_LOCK_GIANT(mp);
|
||||
error = VFS_FHTOVP(mp, &fh.fh_fid, &vp);
|
||||
error = VFS_FHTOVP(mp, &fh.fh_fid, LK_EXCLUSIVE, &vp);
|
||||
if (error) {
|
||||
vfs_unbusy(mp);
|
||||
VFS_UNLOCK_GIANT(vfslocked);
|
||||
|
|
|
@ -18,7 +18,7 @@ SRCS+= bus_if.h device_if.h opt_inet.h opt_inet6.h opt_ipx.h opt_wlan.h \
|
|||
.if !defined(KERNBUILDDIR)
|
||||
opt_wlan.h:
|
||||
echo "#define IEEE80211_DEBUG 1" > ${.TARGET}
|
||||
echo "#define IEEE80211_AMDPU_AGE 1" >> ${.TARGET}
|
||||
echo "#define IEEE80211_AMPDU_AGE 1" >> ${.TARGET}
|
||||
echo "#define IEEE80211_SUPPORT_MESH 1" >> ${.TARGET}
|
||||
opt_inet.h:
|
||||
echo "#define INET 1" > ${.TARGET}
|
||||
|
|
|
@ -578,7 +578,7 @@ MALLOC_DECLARE(M_80211_VAP);
|
|||
|
||||
#define IEEE80211_FHT_BITS \
|
||||
"\20\1NONHT_PR" \
|
||||
"\23GF\24HT\25AMDPU_TX\26AMPDU_TX" \
|
||||
"\23GF\24HT\25AMPDU_TX\26AMPDU_TX" \
|
||||
"\27AMSDU_TX\30AMSDU_RX\31USEHT40\32PUREN\33SHORTGI20\34SHORTGI40" \
|
||||
"\35HTCOMPAT\36RIFS\37STBC_TX\40STBC_RX"
|
||||
|
||||
|
|
|
@ -64,7 +64,6 @@ __FBSDID("$FreeBSD$");
|
|||
#include <sys/signalvar.h>
|
||||
|
||||
#include <vm/vm.h>
|
||||
#include <vm/vm_object.h>
|
||||
#include <vm/vm_extern.h>
|
||||
#include <vm/vm_object.h>
|
||||
|
||||
|
|
|
@ -1128,7 +1128,7 @@ nfsrv_fhtovp(fhandle_t *fhp, int flags, struct vnode **vpp, int *vfslockedp,
|
|||
goto out;
|
||||
}
|
||||
}
|
||||
error = VFS_FHTOVP(mp, &fhp->fh_fid, vpp);
|
||||
error = VFS_FHTOVP(mp, &fhp->fh_fid, LK_EXCLUSIVE, vpp);
|
||||
if (error) {
|
||||
/* Make sure the server replies ESTALE to the client. */
|
||||
error = ESTALE;
|
||||
|
|
|
@ -1797,7 +1797,7 @@ nlm_get_vfs_state(struct nlm_host *host, struct svc_req *rqstp,
|
|||
goto out;
|
||||
}
|
||||
|
||||
error = VFS_FHTOVP(vs->vs_mp, &fhp->fh_fid, &vs->vs_vp);
|
||||
error = VFS_FHTOVP(vs->vs_mp, &fhp->fh_fid, LK_EXCLUSIVE, &vs->vs_vp);
|
||||
if (error)
|
||||
goto out;
|
||||
vs->vs_vnlocked = TRUE;
|
||||
|
|
|
@ -566,7 +566,8 @@ typedef int vfs_statfs_t(struct mount *mp, struct statfs *sbp);
|
|||
typedef int vfs_sync_t(struct mount *mp, int waitfor);
|
||||
typedef int vfs_vget_t(struct mount *mp, ino_t ino, int flags,
|
||||
struct vnode **vpp);
|
||||
typedef int vfs_fhtovp_t(struct mount *mp, struct fid *fhp, struct vnode **vpp);
|
||||
typedef int vfs_fhtovp_t(struct mount *mp, struct fid *fhp,
|
||||
int flags, struct vnode **vpp);
|
||||
typedef int vfs_checkexp_t(struct mount *mp, struct sockaddr *nam,
|
||||
int *extflagsp, struct ucred **credanonp,
|
||||
int *numsecflavors, int **secflavors);
|
||||
|
@ -610,8 +611,8 @@ vfs_statfs_t __vfs_statfs;
|
|||
#define VFS_SYNC(MP, WAIT) (*(MP)->mnt_op->vfs_sync)(MP, WAIT)
|
||||
#define VFS_VGET(MP, INO, FLAGS, VPP) \
|
||||
(*(MP)->mnt_op->vfs_vget)(MP, INO, FLAGS, VPP)
|
||||
#define VFS_FHTOVP(MP, FIDP, VPP) \
|
||||
(*(MP)->mnt_op->vfs_fhtovp)(MP, FIDP, VPP)
|
||||
#define VFS_FHTOVP(MP, FIDP, FLAGS, VPP) \
|
||||
(*(MP)->mnt_op->vfs_fhtovp)(MP, FIDP, FLAGS, VPP)
|
||||
#define VFS_CHECKEXP(MP, NAM, EXFLG, CRED, NUMSEC, SEC) \
|
||||
(*(MP)->mnt_op->vfs_checkexp)(MP, NAM, EXFLG, CRED, NUMSEC, SEC)
|
||||
#define VFS_EXTATTRCTL(MP, C, FN, NS, N) \
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
* in the range 5 to 9.
|
||||
*/
|
||||
#undef __FreeBSD_version
|
||||
#define __FreeBSD_version 900037 /* Master, propagated to newvers */
|
||||
#define __FreeBSD_version 900038 /* Master, propagated to newvers */
|
||||
|
||||
#ifdef _KERNEL
|
||||
#define P_OSREL_SIGSEGV 700004
|
||||
|
|
|
@ -1640,9 +1640,10 @@ ffs_vgetf(mp, ino, flags, vpp, ffs_flags)
|
|||
* those rights via. exflagsp and credanonp
|
||||
*/
|
||||
static int
|
||||
ffs_fhtovp(mp, fhp, vpp)
|
||||
ffs_fhtovp(mp, fhp, flags, vpp)
|
||||
struct mount *mp;
|
||||
struct fid *fhp;
|
||||
int flags;
|
||||
struct vnode **vpp;
|
||||
{
|
||||
struct ufid *ufhp;
|
||||
|
@ -1653,7 +1654,7 @@ ffs_fhtovp(mp, fhp, vpp)
|
|||
if (ufhp->ufid_ino < ROOTINO ||
|
||||
ufhp->ufid_ino >= fs->fs_ncg * fs->fs_ipg)
|
||||
return (ESTALE);
|
||||
return (ufs_fhtovp(mp, ufhp, vpp));
|
||||
return (ufs_fhtovp(mp, ufhp, flags, vpp));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -56,7 +56,7 @@ extern struct vop_vector ufs_vnodeops;
|
|||
int ufs_bmap(struct vop_bmap_args *);
|
||||
int ufs_bmaparray(struct vnode *, ufs2_daddr_t, ufs2_daddr_t *,
|
||||
struct buf *, int *, int *);
|
||||
int ufs_fhtovp(struct mount *, struct ufid *, struct vnode **);
|
||||
int ufs_fhtovp(struct mount *, struct ufid *, int, struct vnode **);
|
||||
int ufs_checkpath(ino_t, ino_t, struct inode *, struct ucred *, ino_t *);
|
||||
void ufs_dirbad(struct inode *, doff_t, char *);
|
||||
int ufs_dirbadentry(struct vnode *, struct direct *, int);
|
||||
|
|
|
@ -208,9 +208,10 @@ ufs_uninit(vfsp)
|
|||
* Call the VFS_CHECKEXP beforehand to verify access.
|
||||
*/
|
||||
int
|
||||
ufs_fhtovp(mp, ufhp, vpp)
|
||||
ufs_fhtovp(mp, ufhp, flags, vpp)
|
||||
struct mount *mp;
|
||||
struct ufid *ufhp;
|
||||
int flags;
|
||||
struct vnode **vpp;
|
||||
{
|
||||
struct inode *ip;
|
||||
|
|
|
@ -134,6 +134,8 @@ static struct mtx uma_boot_pages_mtx;
|
|||
|
||||
/* Is the VM done starting up? */
|
||||
static int booted = 0;
|
||||
#define UMA_STARTUP 1
|
||||
#define UMA_STARTUP2 2
|
||||
|
||||
/* Maximum number of allowed items-per-slab if the slab header is OFFPAGE */
|
||||
static u_int uma_max_ipers;
|
||||
|
@ -959,7 +961,7 @@ startup_alloc(uma_zone_t zone, int bytes, u_int8_t *pflag, int wait)
|
|||
return (tmps->us_data);
|
||||
}
|
||||
mtx_unlock(&uma_boot_pages_mtx);
|
||||
if (booted == 0)
|
||||
if (booted < UMA_STARTUP2)
|
||||
panic("UMA: Increase vm.boot_pages");
|
||||
/*
|
||||
* Now that we've booted reset these users to their real allocator.
|
||||
|
@ -1316,10 +1318,15 @@ keg_ctor(void *mem, int size, void *udata, int flags)
|
|||
#ifdef UMA_MD_SMALL_ALLOC
|
||||
keg->uk_allocf = uma_small_alloc;
|
||||
keg->uk_freef = uma_small_free;
|
||||
#endif
|
||||
if (booted == 0)
|
||||
|
||||
if (booted < UMA_STARTUP)
|
||||
keg->uk_allocf = startup_alloc;
|
||||
} else if (booted == 0 && (keg->uk_flags & UMA_ZFLAG_INTERNAL))
|
||||
#else
|
||||
if (booted < UMA_STARTUP2)
|
||||
keg->uk_allocf = startup_alloc;
|
||||
#endif
|
||||
} else if (booted < UMA_STARTUP2 &&
|
||||
(keg->uk_flags & UMA_ZFLAG_INTERNAL))
|
||||
keg->uk_allocf = startup_alloc;
|
||||
|
||||
/*
|
||||
|
@ -1752,9 +1759,7 @@ uma_startup(void *bootmem, int boot_pages)
|
|||
|
||||
bucket_init();
|
||||
|
||||
#if defined(UMA_MD_SMALL_ALLOC) && !defined(UMA_MD_SMALL_ALLOC_NEEDS_VM)
|
||||
booted = 1;
|
||||
#endif
|
||||
booted = UMA_STARTUP;
|
||||
|
||||
#ifdef UMA_DEBUG
|
||||
printf("UMA startup complete.\n");
|
||||
|
@ -1765,7 +1770,7 @@ uma_startup(void *bootmem, int boot_pages)
|
|||
void
|
||||
uma_startup2(void)
|
||||
{
|
||||
booted = 1;
|
||||
booted = UMA_STARTUP2;
|
||||
bucket_enable();
|
||||
#ifdef UMA_DEBUG
|
||||
printf("UMA startup2 complete.\n");
|
||||
|
|
|
@ -118,7 +118,7 @@
|
|||
#define UMA_SLAB_MASK (PAGE_SIZE - 1) /* Mask to get back to the page */
|
||||
#define UMA_SLAB_SHIFT PAGE_SHIFT /* Number of bits PAGE_MASK */
|
||||
|
||||
#define UMA_BOOT_PAGES 48 /* Pages allocated for startup */
|
||||
#define UMA_BOOT_PAGES 64 /* Pages allocated for startup */
|
||||
|
||||
/* Max waste before going to off page slab management */
|
||||
#define UMA_MAX_WASTE (UMA_SLAB_SIZE / 10)
|
||||
|
|
5
tools/build/options/WITHOUT_KERNEL_SYMBOLS
Normal file
5
tools/build/options/WITHOUT_KERNEL_SYMBOLS
Normal file
|
@ -0,0 +1,5 @@
|
|||
.\" $FreeBSD$
|
||||
Set to not install kernel symbol files.
|
||||
.Bf -symbolic
|
||||
This option is recommended for those people who have small root partitions.
|
||||
.Ef
|
12
tools/regression/bin/sh/builtins/dot4.0
Normal file
12
tools/regression/bin/sh/builtins/dot4.0
Normal file
|
@ -0,0 +1,12 @@
|
|||
# $FreeBSD$
|
||||
|
||||
v=abcd
|
||||
v=$v$v$v$v
|
||||
v=$v$v$v$v
|
||||
v=$v$v$v$v
|
||||
v=$v$v$v$v
|
||||
v=$v$v$v$v
|
||||
r=$( (
|
||||
trap 'exit 0' 0
|
||||
. "$v"
|
||||
) 2>&1 >/dev/null) && [ -n "$r" ]
|
13
tools/regression/bin/sh/parameters/positional1.0
Normal file
13
tools/regression/bin/sh/parameters/positional1.0
Normal file
|
@ -0,0 +1,13 @@
|
|||
# $FreeBSD$
|
||||
|
||||
set -- a b c d e f g h i j
|
||||
[ "$1" = a ] || echo "error at line $LINENO"
|
||||
[ "${1}" = a ] || echo "error at line $LINENO"
|
||||
[ "${1-foo}" = a ] || echo "error at line $LINENO"
|
||||
[ "${1+foo}" = foo ] || echo "error at line $LINENO"
|
||||
[ "$1+foo" = a+foo ] || echo "error at line $LINENO"
|
||||
[ "$10" = a0 ] || echo "error at line $LINENO"
|
||||
[ "$100" = a00 ] || echo "error at line $LINENO"
|
||||
[ "${10}" = j ] || echo "error at line $LINENO"
|
||||
[ "${10-foo}" = j ] || echo "error at line $LINENO"
|
||||
[ "${100-foo}" = foo ] || echo "error at line $LINENO"
|
5
tools/regression/bin/sh/parser/alias4.0
Normal file
5
tools/regression/bin/sh/parser/alias4.0
Normal file
|
@ -0,0 +1,5 @@
|
|||
# $FreeBSD$
|
||||
|
||||
alias alias0=exit
|
||||
eval 'x=1 alias0 0'
|
||||
exit 1
|
5
tools/regression/bin/sh/parser/alias5.0
Normal file
5
tools/regression/bin/sh/parser/alias5.0
Normal file
|
@ -0,0 +1,5 @@
|
|||
# $FreeBSD$
|
||||
|
||||
alias alias0=exit
|
||||
eval '</dev/null alias0 0'
|
||||
exit 1
|
|
@ -4,8 +4,8 @@
|
|||
# $FreeBSD$
|
||||
#
|
||||
# This script compares the file iso3166 (from head/share/misc) with the files
|
||||
# list-en1-semic-2.txt (from
|
||||
# http://www.iso.org/iso/list-en1-semic-2.txt) and iso3166-countrycodes.txt
|
||||
# list-en1-semic-3.txt (from
|
||||
# http://www.iso.org/iso/list-en1-semic-3.txt) and iso3166-countrycodes.txt
|
||||
# (from ftp://ftp.ripe.net/) to see if there any differences.
|
||||
#
|
||||
# Created by Edwin Groothuis <edwin@FreeBSD.org> for the FreeBSD project.
|
||||
|
@ -41,7 +41,7 @@ my %old = ();
|
|||
|
||||
my %new1 = ();
|
||||
{
|
||||
open(FIN, "iso3166-countrycodes.txt") or die "Cannot open iso3166-countrycodes.txt, which can be retrieved from ftp://ftp.ripe.net/";
|
||||
open(FIN, "iso3166-countrycodes.txt") or die "Cannot open iso3166-countrycodes.txt, which can be retrieved from ftp://ftp.ripe.net/iso3166-countrycodes.txt";
|
||||
my @lines = <FIN>;
|
||||
close(FIN);
|
||||
chomp(@lines);
|
||||
|
@ -56,7 +56,7 @@ my %new1 = ();
|
|||
next if ($l eq "");
|
||||
|
||||
die "Invalid line: $l\n"
|
||||
if ($l !~ /^(.+?)[\t ][\t ]+([A-Z]{2})[\t ]+([A-Z]{3})[\t ]+(\d+)[\t ]*$/);
|
||||
if ($l !~ /^(.+?)[\t ]+([A-Z]{2})[\t ]+([A-Z]{3})[\t ]+(\d+)[\t ]*$/);
|
||||
my $two = $2;
|
||||
my $three = $3;
|
||||
my $number = $4;
|
||||
|
@ -71,7 +71,7 @@ my %new1 = ();
|
|||
|
||||
my %new2 = ();
|
||||
{
|
||||
open(FIN, "list-en1-semic-2.txt") or die "Cannot open list-en1-semic-2.txt, which can be retrieved from http://www.iso.org/iso/list-en1-semic-2.txt";
|
||||
open(FIN, "list-en1-semic-3.txt") or die "Cannot open list-en1-semic-3.txt, which can be retrieved from http://www.iso.org/iso/list-en1-semic-3.txt";
|
||||
my @lines = <FIN>;
|
||||
close(FIN);
|
||||
chomp(@lines);
|
||||
|
|
|
@ -207,6 +207,7 @@ cd9660_set_defaults(void)
|
|||
diskStructure.rr_moved_dir = 0;
|
||||
|
||||
diskStructure.archimedes_enabled = 0;
|
||||
diskStructure.chrp_boot = 0;
|
||||
|
||||
diskStructure.include_padding_areas = 1;
|
||||
|
||||
|
@ -391,6 +392,8 @@ cd9660_parse_opts(const char *option, fsinfo_t *fsopts)
|
|||
diskStructure.rock_ridge_enabled = 1;
|
||||
else if (CD9660_IS_COMMAND_ARG_DUAL(var, "A", "archimedes"))
|
||||
diskStructure.archimedes_enabled = 1;
|
||||
else if (CD9660_IS_COMMAND_ARG(var, "chrp-boot"))
|
||||
diskStructure.chrp_boot = 1;
|
||||
else if (CD9660_IS_COMMAND_ARG_DUAL(var, "K", "keep-bad-images"))
|
||||
diskStructure.keep_bad_images = 1;
|
||||
else if (CD9660_IS_COMMAND_ARG(var, "allow-deep-trees"))
|
||||
|
|
|
@ -285,6 +285,7 @@ typedef struct _iso9660_disk {
|
|||
cd9660node *rr_moved_dir;
|
||||
|
||||
int archimedes_enabled;
|
||||
int chrp_boot;
|
||||
|
||||
/* Spec breaking options */
|
||||
u_char allow_deep_trees;
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
* OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <sys/endian.h>
|
||||
|
||||
#include "cd9660.h"
|
||||
#include "cd9660_eltorito.h"
|
||||
|
@ -500,28 +500,63 @@ cd9660_setup_boot_volume_descriptor(volume_descriptor *bvd)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
cd9660_write_mbr_partition_entry(FILE *fd, int index, off_t sector_start,
|
||||
off_t nsectors, int type)
|
||||
{
|
||||
uint8_t val;
|
||||
uint32_t lba;
|
||||
|
||||
fseeko(fd, (off_t)(index) * 16 + 0x1be, SEEK_SET);
|
||||
|
||||
val = 0x80; /* Bootable */
|
||||
fwrite(&val, sizeof(val), 1, fd);
|
||||
|
||||
val = 0xff; /* CHS begin */
|
||||
fwrite(&val, sizeof(val), 1, fd);
|
||||
fwrite(&val, sizeof(val), 1, fd);
|
||||
fwrite(&val, sizeof(val), 1, fd);
|
||||
|
||||
val = type; /* Part type */
|
||||
fwrite(&val, sizeof(val), 1, fd);
|
||||
|
||||
val = 0xff; /* CHS end */
|
||||
fwrite(&val, sizeof(val), 1, fd);
|
||||
fwrite(&val, sizeof(val), 1, fd);
|
||||
fwrite(&val, sizeof(val), 1, fd);
|
||||
|
||||
/* LBA extent */
|
||||
lba = htole32(sector_start);
|
||||
fwrite(&lba, sizeof(lba), 1, fd);
|
||||
lba = htole32(nsectors);
|
||||
fwrite(&lba, sizeof(lba), 1, fd);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
cd9660_write_apm_partition_entry(FILE *fd, int index, int total_partitions,
|
||||
off_t sector_start, off_t nsectors, off_t sector_size,
|
||||
const char *part_name, const char *part_type) {
|
||||
const char *part_name, const char *part_type)
|
||||
{
|
||||
uint32_t apm32;
|
||||
uint16_t apm16;
|
||||
|
||||
fseeko(fd, (off_t)(index + 1) * sector_size, SEEK_SET);
|
||||
|
||||
/* Signature */
|
||||
apm16 = htons(0x504d);
|
||||
apm16 = htobe16(0x504d);
|
||||
fwrite(&apm16, sizeof(apm16), 1, fd);
|
||||
apm16 = 0;
|
||||
fwrite(&apm16, sizeof(apm16), 1, fd);
|
||||
|
||||
/* Total number of partitions */
|
||||
apm32 = htonl(total_partitions);
|
||||
apm32 = htobe32(total_partitions);
|
||||
fwrite(&apm32, sizeof(apm32), 1, fd);
|
||||
/* Bounds */
|
||||
apm32 = htonl(sector_start);
|
||||
apm32 = htobe32(sector_start);
|
||||
fwrite(&apm32, sizeof(apm32), 1, fd);
|
||||
apm32 = htonl(nsectors);
|
||||
apm32 = htobe32(nsectors);
|
||||
fwrite(&apm32, sizeof(apm32), 1, fd);
|
||||
|
||||
fwrite(part_name, strlen(part_name) + 1, 1, fd);
|
||||
|
@ -537,6 +572,7 @@ cd9660_write_boot(FILE *fd)
|
|||
struct boot_catalog_entry *e;
|
||||
struct cd9660_boot_image *t;
|
||||
int apm_partitions = 0;
|
||||
int mbr_partitions = 0;
|
||||
|
||||
/* write boot catalog */
|
||||
if (fseeko(fd, (off_t)diskStructure.boot_catalog_sector *
|
||||
|
@ -571,6 +607,35 @@ cd9660_write_boot(FILE *fd)
|
|||
|
||||
if (t->system == ET_SYS_MAC)
|
||||
apm_partitions++;
|
||||
if (t->system == ET_SYS_PPC)
|
||||
mbr_partitions++;
|
||||
}
|
||||
|
||||
/* some systems need partition tables as well */
|
||||
if (mbr_partitions > 0 || diskStructure.chrp_boot) {
|
||||
uint16_t sig;
|
||||
|
||||
fseek(fd, 0x1fe, SEEK_SET);
|
||||
sig = htole16(0xaa55);
|
||||
fwrite(&sig, sizeof(sig), 1, fd);
|
||||
|
||||
mbr_partitions = 0;
|
||||
|
||||
/* Write ISO9660 descriptor, enclosing the whole disk */
|
||||
if (diskStructure.chrp_boot)
|
||||
cd9660_write_mbr_partition_entry(fd, mbr_partitions++,
|
||||
0, diskStructure.totalSectors *
|
||||
(diskStructure.sectorSize / 512), 0x96);
|
||||
|
||||
/* Write all partition entries */
|
||||
TAILQ_FOREACH(t, &diskStructure.boot_images, image_list) {
|
||||
if (t->system != ET_SYS_PPC)
|
||||
continue;
|
||||
cd9660_write_mbr_partition_entry(fd, mbr_partitions++,
|
||||
t->sector * (diskStructure.sectorSize / 512),
|
||||
t->num_sectors * (diskStructure.sectorSize / 512),
|
||||
0x41 /* PReP Boot */);
|
||||
}
|
||||
}
|
||||
|
||||
if (apm_partitions > 0) {
|
||||
|
@ -580,17 +645,17 @@ cd9660_write_boot(FILE *fd)
|
|||
int total_parts;
|
||||
|
||||
fseek(fd, 0, SEEK_SET);
|
||||
apm16 = htons(0x4552);
|
||||
apm16 = htobe16(0x4552);
|
||||
fwrite(&apm16, sizeof(apm16), 1, fd);
|
||||
/* Device block size */
|
||||
apm16 = htons(512);
|
||||
apm16 = htobe16(512);
|
||||
fwrite(&apm16, sizeof(apm16), 1, fd);
|
||||
/* Device block count */
|
||||
apm32 = htonl(diskStructure.totalSectors *
|
||||
apm32 = htobe32(diskStructure.totalSectors *
|
||||
(diskStructure.sectorSize / 512));
|
||||
fwrite(&apm32, sizeof(apm32), 1, fd);
|
||||
/* Device type/id */
|
||||
apm16 = htons(1);
|
||||
apm16 = htobe16(1);
|
||||
fwrite(&apm16, sizeof(apm16), 1, fd);
|
||||
fwrite(&apm16, sizeof(apm16), 1, fd);
|
||||
|
||||
|
|
|
@ -285,6 +285,9 @@ Use the
|
|||
extension to encode
|
||||
.Tn RISC OS
|
||||
metadata.
|
||||
.It Sy chrp-boot
|
||||
Write an MBR partition table to the image to allow older CHRP hardware to
|
||||
boot.
|
||||
.It Sy boot-load-segment
|
||||
Set load segment for the boot image.
|
||||
.It Sy bootimage
|
||||
|
|
Loading…
Reference in a new issue