code: func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) {
  	urls := params.MainnetBootnodes
  	switch {
  	case ctx.GlobalIsSet(BootnodesFlag.Name) || ctx.GlobalIsSet(BootnodesV4Flag.Name):
  		if ctx.GlobalIsSet(BootnodesV4Flag.Name) {
  			urls = strings.Split(ctx.GlobalString(BootnodesV4Flag.Name), ",")
  		} else {
  			urls = strings.Split(ctx.GlobalString(BootnodesFlag.Name), ",")
  		}
  	case ctx.GlobalBool(TestnetFlag.Name):
  		urls = params.TestnetBootnodes
  	case ctx.GlobalBool(RinkebyFlag.Name):
  		urls = params.RinkebyBootnodes
  	case ctx.GlobalBool(GoerliFlag.Name):
  		urls = params.GoerliBootnodes
  	case cfg.BootstrapNodes != nil:
  		return // already set, don't apply defaults.
  	}
  
  	cfg.BootstrapNodes = make([]*enode.Node, 0, len(urls))
  	for _, url := range urls {
  		if url != "" {
  			node, err := enode.ParseV4(url)
  			if err != nil {
  				log.Crit("Bootstrap URL invalid", "enode", url, "err", err)
  				continue
  			}
  			cfg.BootstrapNodes = append(cfg.BootstrapNodes, node)
  		}
  	}
  }
docs: // setBootstrapNodes creates a list of bootstrap nodes from the command line
  // flags, reverting to pre-configured ones if none have been specified.