Jiri Simsa | d7616c9 | 2015-03-24 23:44:30 -0700 | [diff] [blame] | 1 | // Copyright 2015 The Vanadium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Todd Wang | 8c4e5cc | 2015-04-09 11:30:52 -0700 | [diff] [blame] | 5 | // Package static implements a profile for static network configurations. |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 6 | package static |
| 7 | |
| 8 | import ( |
| 9 | "flag" |
Cosmos Nicolaou | aa87e29 | 2015-04-21 22:15:50 -0700 | [diff] [blame] | 10 | "net" |
| 11 | |
| 12 | "v.io/x/lib/vlog" |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 13 | |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 14 | "v.io/v23" |
| 15 | "v.io/v23/context" |
Matt Rosencrantz | 94502cf | 2015-03-18 09:43:44 -0700 | [diff] [blame] | 16 | "v.io/v23/rpc" |
Cosmos Nicolaou | aa87e29 | 2015-04-21 22:15:50 -0700 | [diff] [blame] | 17 | |
Jiri Simsa | ffceefa | 2015-02-28 11:03:34 -0800 | [diff] [blame] | 18 | "v.io/x/ref/lib/flags" |
Todd Wang | b351149 | 2015-04-07 23:32:34 -0700 | [diff] [blame] | 19 | "v.io/x/ref/lib/security/securityflag" |
Jiri Simsa | ffceefa | 2015-02-28 11:03:34 -0800 | [diff] [blame] | 20 | "v.io/x/ref/profiles/internal" |
Matt Rosencrantz | 86ba1a1 | 2015-03-09 13:19:02 -0700 | [diff] [blame] | 21 | "v.io/x/ref/profiles/internal/lib/appcycle" |
| 22 | "v.io/x/ref/profiles/internal/lib/websocket" |
Matt Rosencrantz | 94502cf | 2015-03-18 09:43:44 -0700 | [diff] [blame] | 23 | _ "v.io/x/ref/profiles/internal/rpc/protocols/tcp" |
| 24 | _ "v.io/x/ref/profiles/internal/rpc/protocols/ws" |
| 25 | _ "v.io/x/ref/profiles/internal/rpc/protocols/wsh" |
Todd Wang | b351149 | 2015-04-07 23:32:34 -0700 | [diff] [blame] | 26 | "v.io/x/ref/profiles/internal/rt" |
Todd Wang | 1ea8f19 | 2015-04-03 17:31:51 -0700 | [diff] [blame] | 27 | "v.io/x/ref/services/debug/debuglib" |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 28 | ) |
| 29 | |
Suharsh Sivakumar | d68949c | 2015-01-26 10:32:23 -0800 | [diff] [blame] | 30 | var commonFlags *flags.Flags |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 31 | |
| 32 | func init() { |
Suharsh Sivakumar | c6f38e9 | 2015-03-31 13:04:06 -0700 | [diff] [blame] | 33 | v23.RegisterProfile(Init) |
Matt Rosencrantz | 94502cf | 2015-03-18 09:43:44 -0700 | [diff] [blame] | 34 | rpc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener) |
Suharsh Sivakumar | d68949c | 2015-01-26 10:32:23 -0800 | [diff] [blame] | 35 | commonFlags = flags.CreateAndRegister(flag.CommandLine, flags.Runtime, flags.Listen) |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 36 | } |
| 37 | |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 38 | func Init(ctx *context.T) (v23.Runtime, *context.T, v23.Shutdown, error) { |
Suharsh Sivakumar | d68949c | 2015-01-26 10:32:23 -0800 | [diff] [blame] | 39 | if err := internal.ParseFlags(commonFlags); err != nil { |
Matt Rosencrantz | 1b79391 | 2015-01-23 13:32:53 -0800 | [diff] [blame] | 40 | return nil, nil, nil, err |
| 41 | } |
Suharsh Sivakumar | d68949c | 2015-01-26 10:32:23 -0800 | [diff] [blame] | 42 | |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 43 | lf := commonFlags.ListenFlags() |
Matt Rosencrantz | 94502cf | 2015-03-18 09:43:44 -0700 | [diff] [blame] | 44 | listenSpec := rpc.ListenSpec{ |
| 45 | Addrs: rpc.ListenAddrs(lf.Addrs), |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 46 | Proxy: lf.ListenProxy, |
| 47 | } |
Todd Wang | b351149 | 2015-04-07 23:32:34 -0700 | [diff] [blame] | 48 | reservedDispatcher := debuglib.NewDispatcher(vlog.Log.LogDir, securityflag.NewAuthorizerOrDie()) |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 49 | |
| 50 | ac := appcycle.New() |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 51 | |
| 52 | // Our address is private, so we test for running on GCE and for its 1:1 NAT |
Cosmos Nicolaou | aa87e29 | 2015-04-21 22:15:50 -0700 | [diff] [blame] | 53 | // configuration. GCEPublicAddress returns a non-nil addr if we are |
| 54 | // running on GCE. |
Suharsh Sivakumar | d68949c | 2015-01-26 10:32:23 -0800 | [diff] [blame] | 55 | if !internal.HasPublicIP(vlog.Log) { |
| 56 | if addr := internal.GCEPublicAddress(vlog.Log); addr != nil { |
Cosmos Nicolaou | aa87e29 | 2015-04-21 22:15:50 -0700 | [diff] [blame] | 57 | listenSpec.AddressChooser = func(string, []net.Addr) ([]net.Addr, error) { |
| 58 | return []net.Addr{addr}, nil |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 59 | } |
Todd Wang | b351149 | 2015-04-07 23:32:34 -0700 | [diff] [blame] | 60 | runtime, ctx, shutdown, err := rt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher) |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 61 | if err != nil { |
| 62 | return nil, nil, nil, err |
| 63 | } |
Matt Rosencrantz | fa3082c | 2015-01-22 21:39:04 -0800 | [diff] [blame] | 64 | profileShutdown := func() { |
| 65 | ac.Shutdown() |
| 66 | shutdown() |
| 67 | } |
| 68 | return runtime, ctx, profileShutdown, nil |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 69 | } |
| 70 | } |
| 71 | listenSpec.AddressChooser = internal.IPAddressChooser |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 72 | |
Todd Wang | b351149 | 2015-04-07 23:32:34 -0700 | [diff] [blame] | 73 | runtime, ctx, shutdown, err := rt.Init(ctx, ac, nil, &listenSpec, commonFlags.RuntimeFlags(), reservedDispatcher) |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 74 | if err != nil { |
| 75 | return nil, nil, shutdown, err |
| 76 | } |
Matt Rosencrantz | aeed5d5 | 2015-01-14 15:18:34 -0800 | [diff] [blame] | 77 | |
| 78 | profileShutdown := func() { |
Matt Rosencrantz | aeed5d5 | 2015-01-14 15:18:34 -0800 | [diff] [blame] | 79 | ac.Shutdown() |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 80 | shutdown() |
Matt Rosencrantz | aeed5d5 | 2015-01-14 15:18:34 -0800 | [diff] [blame] | 81 | } |
| 82 | return runtime, ctx, profileShutdown, nil |
Suharsh Sivakumar | 033a30e | 2015-01-07 13:54:43 -0800 | [diff] [blame] | 83 | } |