blob: 4666ecd5000cba11d83b63bdbda7d537d05977b1 [file] [log] [blame]
#!/bin/bash
# Copyright 2021 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#### CATEGORY=Device management
### find other names for the same node
## usage: fx node-names HOSTNAME
##
## Prints other names a node may have had based on the generated hostnames.
## hostname can be:
## - a gen 1 name like fs-0123-4567-89ab
##
## Gen 0 names (step-atom-yard-juicy) aren't forward-mappable into new name.
set -euo pipefail
# matches //src/bringup/bin/device-name-provider/name_tokens.h
nameTokens=(
"acid" "acorn" "acre" "acts" "afar" "affix" "aged" "agent" "agile" "aging"
"agony" "ahead" "aide" "aids" "aim" "ajar" "alarm" "alias" "alibi" "alien"
"alike" "alive" "aloe" "aloft" "aloha" "alone" "amend" "amino" "ample" "amuse"
"angel" "anger" "angle" "ankle" "apple" "april" "apron" "aqua" "area" "arena"
"argue" "arise" "armed" "armor" "army" "aroma" "array" "arson" "art" "ashen"
"ashes" "atlas" "atom" "attic" "audio" "avert" "avoid" "awake" "award" "awoke"
"axis" "bacon" "badge" "bagel" "baggy" "baked" "baker" "balmy" "banjo" "barge"
"barn" "bash" "basil" "bask" "batch" "bath" "baton" "bats" "blade" "blank"
"blast" "blaze" "bleak" "blend" "bless" "blimp" "blink" "bloat" "blob" "blog"
"blot" "blunt" "blurt" "blush" "boast" "boat" "body" "boil" "bok" "bolt"
"boned" "boney" "bonus" "bony" "book" "booth" "boots" "boss" "botch" "both"
"boxer" "breed" "bribe" "brick" "bride" "brim" "bring" "brink" "brisk" "broad"
"broil" "broke" "brook" "broom" "brush" "buck" "bud" "buggy" "bulge" "bulk"
"bully" "bunch" "bunny" "bunt" "bush" "bust" "busy" "buzz" "cable" "cache"
"cadet" "cage" "cake" "calm" "cameo" "canal" "candy" "cane" "canon" "cape"
"card" "cargo" "carol" "carry" "carve" "case" "cash" "cause" "cedar" "chain"
"chair" "chant" "chaos" "charm" "chase" "cheek" "cheer" "chef" "chess" "chest"
"chew" "chief" "chili" "chill" "chip" "chomp" "chop" "chow" "chuck" "chump"
"chunk" "churn" "chute" "cider" "cinch" "city" "civic" "civil" "clad" "claim"
"clamp" "clap" "clash" "clasp" "class" "claw" "clay" "clean" "clear" "cleat"
"cleft" "clerk" "click" "cling" "clink" "clip" "cloak" "clock" "clone" "cloth"
"cloud" "clump" "coach" "coast" "coat" "cod" "coil" "coke" "cola" "cold"
"colt" "coma" "come" "comic" "comma" "cone" "cope" "copy" "coral" "cork"
"cost" "cot" "couch" "cough" "cover" "cozy" "craft" "cramp" "crane" "crank"
"crate" "crave" "crawl" "creek" "creme" "crepe" "crept" "crib" "cried" "crisp"
"crook" "crop" "cross" "crowd" "crown" "crumb" "crush" "crust" "cub" "cult"
"cupid" "cure" "curl" "curry" "curse" "curve" "curvy" "cushy" "cut" "cycle"
"dab" "dad" "daily" "dairy" "daisy" "dance" "dandy" "darn" "dart" "dash"
"data" "date" "dawn" "deaf" "deal" "dean" "debit" "debt" "debug" "decaf"
"decal" "decay" "deck" "decor" "decoy" "deed" "delay" "denim" "dense" "dent"
"depth" "derby" "desk" "dial" "diary" "dice" "dig" "dill" "dime" "dimly"
"diner" "dingy" "disco" "dish" "disk" "ditch" "ditzy" "dizzy" "dock" "dodge"
"doing" "doll" "dome" "donor" "donut" "dose" "dot" "dove" "down" "dowry"
"doze" "drab" "drama" "drank" "draw" "dress" "dried" "drift" "drill" "drive"
"drone" "droop" "drove" "drown" "drum" "dry" "duck" "duct" "dude" "dug"
"duke" "duo" "dusk" "dust" "duty" "dwarf" "dwell" "eagle" "early" "earth"
"easel" "east" "eaten" "eats" "ebay" "ebony" "ebook" "echo" "edge" "eel"
"eject" "elbow" "elder" "elf" "elk" "elm" "elope" "elude" "elves" "email"
"emit" "empty" "emu" "enter" "entry" "envoy" "equal" "erase" "error" "erupt"
"essay" "etch" "evade" "even" "evict" "evil" "evoke" "exact" "exit" "fable"
"faced" "fact" "fade" "fall" "false" "fancy" "fang" "fax" "feast" "feed"
"femur" "fence" "fend" "ferry" "feta" "fetch" "fever" "fiber" "fifth" "fifty"
"film" "filth" "final" "finch" "fit" "five" "flag" "flaky" "flame" "flap"
"flask" "fled" "flick" "fling" "flint" "flip" "flirt" "float" "flock" "flop"
"floss" "flyer" "foam" "foe" "fog" "foil" "folic" "folk" "food" "fool"
"found" "fox" "foyer" "frail" "frame" "fray" "fresh" "fried" "frill" "frisk"
"from" "front" "frost" "froth" "frown" "froze" "fruit" "gag" "gains" "gala"
"game" "gap" "gas" "gave" "gear" "gecko" "geek" "gem" "genre" "gift"
"gig" "gills" "given" "giver" "glad" "glass" "glide" "gloss" "glove" "glow"
"glue" "goal" "going" "golf" "gong" "good" "gooey" "goofy" "gore" "gown"
"grab" "grain" "grant" "grape" "graph" "grasp" "grass" "grave" "gravy" "gray"
"green" "greet" "grew" "grid" "grief" "grill" "grip" "grit" "groom" "grope"
"growl" "grub" "grunt" "guide" "gulf" "gulp" "gummy" "guru" "gush" "gut"
"guy" "habit" "half" "halo" "halt" "happy" "harm" "hash" "hasty" "hatch"
"hate" "haven" "hazel" "hazy" "heap" "heat" "heave" "hedge" "hefty" "help"
"herbs" "hers" "hub" "hug" "hula" "hull" "human" "humid" "hump" "hung"
"hunk" "hunt" "hurry" "hurt" "hush" "hut" "ice" "icing" "icon" "icy"
"igloo" "image" "ion" "iron" "islam" "issue" "item" "ivory" "ivy" "jab"
"jam" "jaws" "jazz" "jeep" "jelly" "jet" "jiffy" "job" "jog" "jolly"
"jolt" "jot" "joy" "judge" "juice" "juicy" "july" "jumbo" "jump" "junky"
"juror" "jury" "keep" "keg" "kept" "kick" "kilt" "king" "kite" "kitty"
"kiwi" "knee" "knelt" "koala" "kung" "ladle" "lady" "lair" "lake" "lance"
"land" "lapel" "large" "lash" "lasso" "last" "latch" "late" "lazy" "left"
"legal" "lemon" "lend" "lens" "lent" "level" "lever" "lid" "life" "lift"
"lilac" "lily" "limb" "limes" "line" "lint" "lion" "lip" "list" "lived"
"liver" "lunar" "lunch" "lung" "lurch" "lure" "lurk" "lying" "lyric" "mace"
"maker" "malt" "mama" "mango" "manor" "many" "map" "march" "mardi" "marry"
"mash" "match" "mate" "math" "moan" "mocha" "moist" "mold" "mom" "moody"
"mop" "morse" "most" "motor" "motto" "mount" "mouse" "mousy" "mouth" "move"
"movie" "mower" "mud" "mug" "mulch" "mule" "mull" "mumbo" "mummy" "mural"
"muse" "music" "musky" "mute" "nacho" "nag" "nail" "name" "nanny" "nap"
"navy" "near" "neat" "neon" "nerd" "nest" "net" "next" "niece" "ninth"
"nutty" "oak" "oasis" "oat" "ocean" "oil" "old" "olive" "omen" "onion"
"only" "ooze" "opal" "open" "opera" "opt" "otter" "ouch" "ounce" "outer"
"oval" "oven" "owl" "ozone" "pace" "pagan" "pager" "palm" "panda" "panic"
"pants" "panty" "paper" "park" "party" "pasta" "patch" "path" "patio" "payer"
"pecan" "penny" "pep" "perch" "perky" "perm" "pest" "petal" "petri" "petty"
"photo" "plank" "plant" "plaza" "plead" "plot" "plow" "pluck" "plug" "plus"
"poach" "pod" "poem" "poet" "pogo" "point" "poise" "poker" "polar" "polio"
"polka" "polo" "pond" "pony" "poppy" "pork" "poser" "pouch" "pound" "pout"
"power" "prank" "press" "print" "prior" "prism" "prize" "probe" "prong" "proof"
"props" "prude" "prune" "pry" "pug" "pull" "pulp" "pulse" "puma" "punch"
"punk" "pupil" "puppy" "purr" "purse" "push" "putt" "quack" "quake" "query"
"quiet" "quill" "quilt" "quit" "quota" "quote" "rabid" "race" "rack" "radar"
"radio" "raft" "rage" "raid" "rail" "rake" "rally" "ramp" "ranch" "range"
"rank" "rant" "rash" "raven" "reach" "react" "ream" "rebel" "recap" "relax"
"relay" "relic" "remix" "repay" "repel" "reply" "rerun" "reset" "rhyme" "rice"
"rich" "ride" "rigid" "rigor" "rinse" "riot" "ripen" "rise" "risk" "ritzy"
"rival" "river" "roast" "robe" "robin" "rock" "rogue" "roman" "romp" "rope"
"rover" "royal" "ruby" "rug" "ruin" "rule" "runny" "rush" "rust" "rut"
"sadly" "sage" "said" "saint" "salad" "salon" "salsa" "salt" "same" "sandy"
"santa" "satin" "sauna" "saved" "savor" "sax" "say" "scale" "scam" "scan"
"scare" "scarf" "scary" "scoff" "scold" "scoop" "scoot" "scope" "score" "scorn"
"scout" "scowl" "scrap" "scrub" "scuba" "scuff" "sect" "sedan" "self" "send"
"sepia" "serve" "set" "seven" "shack" "shade" "shady" "shaft" "shaky" "sham"
"shape" "share" "sharp" "shed" "sheep" "sheet" "shelf" "shell" "shine" "shiny"
"ship" "shirt" "shock" "shop" "shore" "shout" "shove" "shown" "showy" "shred"
"shrug" "shun" "shush" "shut" "shy" "sift" "silk" "silly" "silo" "sip"
"siren" "sixth" "size" "skate" "skew" "skid" "skier" "skies" "skip" "skirt"
"skit" "sky" "slab" "slack" "slain" "slam" "slang" "slash" "slate" "slaw"
"sled" "sleek" "sleep" "sleet" "slept" "slice" "slick" "slimy" "sling" "slip"
"slit" "slob" "slot" "slug" "slum" "slurp" "slush" "small" "smash" "smell"
"smile" "smirk" "smog" "snack" "snap" "snare" "snarl" "sneak" "sneer" "sniff"
"snore" "snort" "snout" "snowy" "snub" "snuff" "speak" "speed" "spend" "spent"
"spew" "spied" "spill" "spiny" "spoil" "spoke" "spoof" "spool" "spoon" "sport"
"spot" "spout" "spray" "spree" "spur" "squad" "squat" "squid" "stack" "staff"
"stage" "stain" "stall" "stamp" "stand" "stank" "stark" "start" "stash" "state"
"stays" "steam" "steep" "stem" "step" "stew" "stick" "sting" "stir" "stock"
"stole" "stomp" "stony" "stood" "stool" "stoop" "stop" "storm" "stout" "stove"
"straw" "stray" "strut" "stuck" "stud" "stuff" "stump" "stung" "stunt" "suds"
"sugar" "sulk" "surf" "sushi" "swab" "swan" "swarm" "sway" "swear" "sweat"
"sweep" "swell" "swept" "swim" "swing" "swipe" "swirl" "swoop" "swore" "syrup"
"tacky" "taco" "tag" "take" "tall" "talon" "tamer" "tank" "taper" "taps"
"tarot" "tart" "task" "taste" "tasty" "taunt" "thank" "thaw" "theft" "theme"
"thigh" "thing" "think" "third" "thorn" "those" "throb" "thud" "thumb" "thump"
"thus" "tiara" "tidal" "tidy" "tiger" "tile" "tilt" "tint" "tiny" "trace"
"track" "trade" "train" "trait" "trap" "trash" "tray" "treat" "tree" "trek"
"trend" "trial" "tribe" "trick" "trio" "trout" "truce" "truck" "trump" "trunk"
"try" "tug" "tulip" "tummy" "turf" "tusk" "tutor" "tutu" "tux" "tweak"
"tweet" "twice" "twine" "twins" "twirl" "twist" "uncle" "uncut" "undo" "unify"
"union" "unit" "untie" "upon" "upper" "urban" "used" "user" "usher" "utter"
"value" "vapor" "vegan" "venue" "verse" "vest" "veto" "vice" "video" "view"
"viral" "virus" "visa" "visor" "vixen" "vocal" "voice" "void" "volt" "voter"
"vowel" "wad" "wafer" "wager" "wages" "wagon" "wake" "walk" "wand" "wasp"
"watch" "water" "wavy" "wheat" "whiff" "whole" "whoop" "wick" "widen" "widow"
"width" "wife" "wifi" "wilt" "wimp" "wind" "wing" "wink" "wipe" "wired"
"wiry" "wise" "wish" "wispy" "wok" "wolf" "womb" "wool" "woozy" "word"
"work" "worry" "wound" "woven" "wrath" "wreck" "wrist" "xerox" "yahoo" "yam"
"yard" "year" "yeast" "yelp" "yield" "yo-yo" "yodel" "yoga" "yoyo" "yummy"
"zebra" "zero" "zesty" "zippy" "zone" "zoom"
);
hex_chars="0123456789abcdef";
function chars_from_index {
num=$1;
token="";
for (( i = 0; i < 4; i++)); do
left=$((num >> ((2 - i) * 4)));
idx=$((left & 15));
token="$token${hex_chars:$idx:1}";
done
echo $token;
}
function index_from_chars {
arg=$1;
total=0;
for (( i = 0; i < 3; i++)); do
letter=${arg:$i:1};
multiplier=$((1 << ((2 - i) * 4)));
for (( j = 0; j < 16; j++ )); do
if [[ "$letter" == "${hex_chars:$j:1}" ]]; then
total=$((total + (j * multiplier)));
break;
fi
done
done
echo $total;
}
function hex_from_word {
for (( i = 0; i < ${#nameTokens[@]}; i++ )); do
if [ "x${nameTokens[$i]}" == "x$1" ]; then
chars_from_index "$i";
return;
fi
done
echo "";
}
function translations {
IFS='-' read -ra PARTS <<< "$1";
index=$(hex_from_word "${PARTS[0]}");
if [[ $index != "" ]]; then
# Found in the word list, probably four-word-node-name
echo "Can't forward convert from a four-word-node-name.";
exit 1;
else
# probably fs- a hex name
mac=(
$((16#${PARTS[1]:0:2})) $((16#${PARTS[1]:2:2}))
$((16#${PARTS[2]:0:2})) $((16#${PARTS[2]:2:2}))
$((16#${PARTS[3]:0:2})) $((16#${PARTS[3]:2:2}))
);
indexes=(
$(( ((mac[4] << 8) & 0xF00) + mac[0]))
$(( ((mac[5] << 8) & 0xF00) + mac[1]))
$(( ((mac[4] << 4) & 0xF00) + mac[2]))
$(( ((mac[5] << 4) & 0xF00) + mac[3]))
);
wordname="";
for index in "${indexes[@]}"; do
index=$((index % 1296));
word=${nameTokens[$index]};
wordname="$wordname-$word";
done
echo "${wordname:1}";
fi
}
while (( $# )); do
names=$(translations "$1");
echo "other node-name generations for $1 are ${names}";
shift
done